Android EditText-可编辑但不可选择?
是否可以使EditText可编辑但不可选择?我希望能够编辑一些文本,然后在页面上拖动它。它可以工作,但当您拖动它时,这算是长时间单击,因此它会选择一些文本Android EditText-可编辑但不可选择?,android,android-edittext,touch-event,selectable,Android,Android Edittext,Touch Event,Selectable,是否可以使EditText可编辑但不可选择?我希望能够编辑一些文本,然后在页面上拖动它。它可以工作,但当您拖动它时,这算是长时间单击,因此它会选择一些文本 我是否需要在单击EditText时显示另一个视图,让它捕获触摸事件,然后在事件操作启动时隐藏它并将焦点返回到EditText?这似乎有点骇人听闻/过于复杂。这应该是可行的:android:textIsSelectable=“false” 第二种可能的解决方案是将空的onLongClickListener放在消费事件的位置 OnLongClic
我是否需要在单击EditText时显示另一个视图,让它捕获触摸事件,然后在事件操作启动时隐藏它并将焦点返回到EditText?这似乎有点骇人听闻/过于复杂。这应该是可行的:
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();
这显然会取消任何继承的单击,而不仅仅是长时间的单击,即显示光标,并且不会选择任何文本,但也不会打开键盘,但这很简单:
View v = activity.getWindow().getCurrentFocus();
if (v != null) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(v, 0);
}
使用setTextIsSelectable(false)
实现了所需的行为。诀窍是首先运行setTextIsSelectable(true)
。它克服了SDK中的错误/功能(如果您感兴趣,请调试此方法)。在安卓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);
您是否尝试从侦听器中的onLongClick事件返回true,以便该事件不会继续到EditText的默认onLongClickListener?它不是长单击事件,而是触摸事件,但TextView类具有固有的longclicklistener。我试着告诉它返回真的动作,但它只是移动编辑文本,它没有进入编辑模式或拉键盘,我试过了。它不起作用,有什么东西在覆盖它。我是在xml和编程中做的。你能解释你的答案吗?我会认为这是不言自明的。例如,您可以在活动的onCreate()方法中使用它。第一行检索EditText,第二行使其在长按时不可选择,尽管双击仍然有效。与Vladimir的建议(在xml中使用android:textIsSelectable=“false”)相比,它的优势在于,如果您希望能够打开和关闭属性,那么我不需要解释。我推荐你是因为你的答案被标记为低质量,你可以解释你的答案对任何想解决类似问题的用户来说都会更好。我试过了。你可能会认为这样就行了,但对我来说不行。
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);