【问题标题】:EditText weird focus behaviourEditText 奇怪的焦点行为
【发布时间】:2019-04-15 10:40:46
【问题描述】:

好的,

当我专注于我的 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;
        }
    });

如您所见,我正在尽我所能来始终获得相同的行为。然而到目前为止还没有运气。希望大家帮帮我!

【问题讨论】:

  • 你为什么不想要焦点?
  • 你确定getView().requestFocus() 中的getView() 返回父视图吗?看起来您请求的是同一个视图而不是父视图的焦点。
  • 是的,很确定它指的是 Fragment.getView();。我也尝试过其他视图。
  • searchView 是您 XML 中最后一个可聚焦的视图吗?因为如果是,您将面临 Android 系统问题。你看,你试图将焦点从视图中清除,但是它没有其他视图可以关注,这就是光标没有消失的原因

标签: android android-edittext


【解决方案1】:

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

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

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

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

android:drawableLeft="@drawable/my_icon"

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

【讨论】:

  • 也许你正在做一些不同的事情。我现在在我的项目中进行了测试。我在RelativeLayout 中有2 个Edittext。当我在这个亲戚的 xml 中写上面几行时,然后在这些编辑文本之外按下相对,焦点消失,键盘和光标隐藏。
  • 是的,这也发生在我身上。但是,当我在编辑文本的末尾按下我的可绘制对象时。我需要手动取消edittext等,然后它不起作用。
  • 这是edittext的可绘制部分还是布局中的单独视图?
  • 也许您的解决方案是将其分开?
  • 值得一试,我没有其他想法。
【解决方案2】:

好吧,我目前的“解决方案”是@Dmitriy Pavlukhin 建议的解决方案。

我没有使用 EditText 本身的 drawableEnd,而是创建了一个具有相同可绘制对象的单独视图,并确保将其绘制在同一位置。现在,当我单击此视图时,它会在 100% 的时间内根据需要清除视图。问题中的代码库仍然相同,但它现在在分离视图上的 OnClick 中实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2021-05-03
    • 1970-01-01
    相关资源
    最近更新 更多