EditText怪异的焦点行为

时间:2019-04-15 10:40:46

标签: android android-edittext

好的

当我将注意力集中在EditText上时,将显示键盘等。我单击edittext(取消按钮)末尾的可绘制对象。我使用onTouchListener识别此事件,并自己隐藏键盘,清除焦点等。

但是,当我“触摸”取消按钮时,它隐藏了键盘,但是焦点仍然停留在编辑文本上。表示光标仍在显示,但没有闪烁。因此,当我再次单击edittext以获得焦点时,它会显示复制/粘贴等选项,就像我长按光标而不显示键盘一样。

但是,当我“按下”取消按钮时,它将清除焦点,隐藏键盘,最重要的是,它隐藏了光标,从而完全消除了焦点。然后,当我再次单击edittext时,它将重新聚焦并显示键盘。

这是什么奇怪的行为,我如何使其始终表现为“按”行为。

我的代码:

searchView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_UP) {
                if (event.getRawX() >= searchView.getRight() - searchView.getCompoundDrawables()[2].getBounds().width()) {
                    hideKeyboard(v);
                    isSearching = false;
                    searchView.setText("");
                    searchView.clearFocus();
                    searchView.setFocusable(false);
                    searchView.setFocusableInTouchMode(false);
                    getView().requestFocus(); // parent has both focusables true
                    searchView.setFocusable(true);
                    searchView.setFocusableInTouchMode(true);
                    fetchArticles();

                    return true;
                }
            }
            return false;
        }
    });

就像您看到的那样,我正在尽我所能以始终获得相同的行为。但是到目前为止没有运气。希望你们能帮助我!

2 个答案:

答案 0 :(得分:1)

在该EditText的父级或要触摸的视图中尝试以下操作:

android:clickable="true"
android:focusable="true" 
android:focusableInTouchMode="true"

这将允许将焦点从EditText完全转移到其他地方

但是,如果您的可绘制对象位于您的Edittext中,例如:

android:drawableLeft="@drawable/my_icon"

该解决方案只有在您将可绘制的图像作为布局中的单独视图时才起作用。

答案 1 :(得分:0)

好的,所以我当前的“解决方案”是@Dmitriy Pavlukhin提出的建议解决方案。

我没有使用EditText本身的drawableEnd,而是创建了一个具有相同drawable的单独视图,并确保将其绘制在同一位置。现在,当我单击该视图时,它将按所需的100%的时间清除该视图。这个问题的代码库仍然是相同的,但是现在它是在单独视图的OnClick中实现的。