Android EditText - 可编辑但不可选择?

Android EditText - Editable but not Selectable?

是否可以让EditText可编辑但不可选择?我希望能够编辑一些文本,然后将其拖到页面上。它可以工作,但是当您拖动它时,这会被视为长按,因此它会选择一些文本。

我是否需要做一些事情,比如当我点击 EditText 时显示另一个视图,改为捕获触摸事件,然后在事件操作启动时隐藏它并且 return 聚焦到 editText ?这似乎 hacky/overly 复杂。

这应该有效:android:textIsSelectable="false"

第二种可能的解决方案是放置会消耗事件的空 onLongClickListener。

OnLongClickListener longClickListener = new OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {\
        return true; //true = event consumed, false = event not consumed
    }
};

也许不完全是您正在寻找的解决方案,但是当 EditText 被放置到位时,您可以通过调用 editText.clearFocus();

来确保没有选择

如果您需要保留在拖动之前存在的选择,这将是一个问题,但如果您只是想确保选择被清除则不是。

我发现了一个比我上面提到的解决方案稍微简单一点的解决方案,然后尝试了(但没有用),但这确实有效:

先做这个,

image_text.cancelLongPress();

这显然取消了任何继承的点击,而不仅仅是长按,即它显示了光标,它没有 select 任何文本,但它也没有调出键盘,但就是这样容易:

View v = activity.getWindow().getCurrentFocus();
        if (v != null) {
            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(v, 0);
        }
EditText myEditText = (EditText) findViewById(R.id.my_edit_text);
myEditText.setTextIsSelectable(false);

使用 setTextIsSelectable(false) 实现了预期的行为。诀窍是先 运行 setTextIsSelectable(true) 。克服了SDK中的bug/feature(有兴趣的可以调试这个方法)。在 Android 7.1.1.

上测试
editText.setTextIsSelectable(true); // needed in order to next line work properly
editText.setTextIsSelectable(false);

// restore soft keyboard functionality broken by previous line
editText.setFocusableInTouchMode(true);
editText.setFocusable(true);
editText.setClickable(true);