首页 > 解决方案 > EditText 奇怪的焦点行为

问题描述

好吧,

当我专注于我的 EditText 并且键盘等正在显示时。我在edittext(取消按钮)的末尾单击我的drawable。我通过 onTouchListener 识别此事件并自己隐藏键盘、清除焦点等。

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

但是当我“按下”取消按钮时,它会清除焦点,隐藏键盘,最重要的是它会隐藏光标,从而完全移除焦点。然后,当我再次单击编辑文本时,它会重新获得焦点并显示键盘。

这是什么奇怪的行为,我如何让它总是做“新闻”行为。

我的代码:

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;
        }
    });

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

标签: androidandroid-edittext

解决方案


在该 EditText 的父级或要触摸的视图中尝试这些:

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

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

但是,如果您的可绘制对象位于 Edittext 内部,如下所示:

android:drawableLeft="@drawable/my_icon"

在您将可绘制为布局中的单独视图之前,该解决方案将不起作用。


推荐阅读