2015-02-11 73 views
0

我感到有点内疚,因为有很多问题,但我找不到解决方案。如何让我的EditText在我碰别的东西时失去焦点?

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

  • 查看失去的重点,当我触及其他事物(例如,外部空白);
  • 当我在布局中触摸其他视图时会失去焦点。

现在,答案大多是说如何通过添加一个click侦听所有其他视图,达到第二个目标。这是可能的,但不是我认为的最佳方式。

至于第(查看只要你碰之外失去焦点)大量的输入来自何处:

可聚焦视图(如本的EditText )只有在另一个可聚焦的观点获得时才会失去焦点。大多数视图默认情况下不支持焦点。

活像的最终解决方案,但设置android:focusable(或在触摸模式可聚焦)上的其他元素(试了RatingBar和整体Layout),我什么也没做。

  • this问题,人们的解决方案,涉及触摸点的getX()/getY(),并检查它是否是在编辑文本里面走了过来。我发现问题本身比问题更复杂,而且如果你有多个编辑文本,就会感到沮丧。

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

回答

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调用它。

+0

这个答案实际上与我的问题有关(请参阅我讨论getX()/ getY()时),正如我所说我正在寻找更简单的解决方案。如果您有多个编辑文本,这会很痛苦。 – natario 2015-02-11 13:37:13

+0

我更新了我的代码。你可以检查它并让我@m iav – 2015-02-12 05:15:36