当我触摸别的东西时,如何让我的EditText失去焦点?

时间:2015-02-11 12:46:44

标签: android android-edittext android-input-method

我觉得有点内疚,因为有很多问题,但我找不到解决方案。

当我触摸外面时,如何让我的(单个)EditText失去焦点?通过焦点我的意思是视图准备好输入,光标可见。我会好的:

  • 当我触摸其他任何东西时(例如,外面的空白区域),查看失去焦点;
  • 当我触摸布局中的其他视图时,查看失去焦点。

现在,答案主要是通过向所有其他视图添加点击监听器来说明如何实现第二个目标。这是可能的,但不是我认为最好的方式。

至于第一个(一旦你在外面看到失去焦点),很多输入来自:

  

可聚焦视图(例如此EditText)仅在另一个可聚焦视图获得焦点时失去焦点。大多数视图默认不可聚焦。

看起来像是终极解决方案,但在其他元素上设置android:focusable(或在触摸模式下可关注)(在RatingBar和整个Layout上尝试过)对我没有任何帮助。< / p>

  • this问题,人们想出了涉及getX() / getY()触摸点的解决方案,并检查它是否在编辑文本中。我发现它比问题本身更复杂,而且如果你有多个编辑文本则相当令人沮丧。

还有什么其他的共同愿望吗?从概念上讲,为什么如果我给EditText提供输入并点击(例如在评级栏上)该视图应该仍然聚焦并等待,其闪烁的光标?

1 个答案:

答案 0 :(得分:2)

您可以使用dispatchTouchEvent完成。

@Override
   public boolean dispatchTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
    if (mEditText.isFocused()) {
        Rect outRect = new Rect();
        mEditText.getGlobalVisibleRect(outRect);
        if (!outRect.contains((int)event.getRawX(),(int)event.getRawY()))   {
            mEditText.clearFocus();
            //
            // Hide keyboard
            //
            InputMethodManager imm = (InputMethodManager)    v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
            imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
         }
       }
     }
 return super.dispatchTouchEvent(event);
 }

使用更多编辑文本会有点困难。所以当我遇到类似的问题时,我发现它并认为我会分享我最终做的事情。

每次获得焦点的视图都不同,因此我使用了非常通用的视图:

 View current = getCurrentFocus();
 if (current != null) current.clearFocus();

您可以在dispatchTouchEvent中调用它。