Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android EditText-可编辑但不可选择?_Android_Android Edittext_Touch Event_Selectable - Fatal编程技术网

Android 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时显示另一个视图,让它捕获触摸事件,然后在事件操作启动时隐藏它并将焦点返回到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);