我有些内asking地问,因为有很多问题,但是我找不到解决方案。
当我触摸外部时,如何使我的(单个)EditText失去焦点?通过焦点,我的意思是视图已经准备就绪,可以输入,并且光标可见。我可以:
当我碰到其他任何东西时(例如外面的空白处),会失去焦点;
当我触摸布局中的其他视图时,视图会失去焦点。
现在,答案大多是说明如何通过向所有其他视图中添加点击侦听器来达到第二个目标。在我看来,这将是可能的,但不是最佳方法。
至于第一个(一旦您触摸到外面,视图就会失去焦点)很多输入来自:
这个答案:
A focusable view (such as this EditText) only loses focus when another focusable view gains it. Most views are not focusable by default.
看起来像是最终的解决方案,但是在其他元素(在RatingBar和整个Layout上尝试过)上设置android:focusable(或在触摸模式下可聚焦)对我没有任何作用。
这个问题,人们提出了涉及触摸点的getX() / getY()的解决方案,并检查它是否在编辑文本中。我发现这比问题本身更复杂,如果您有多个编辑文本,那会令人沮丧。
还有一个共同的愿望吗?从概念上讲,为什么如果我向EditText输入内容并点击(例如,在评级栏上),则该视图仍应保持焦点并等待其光标闪烁?
您可以使用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中调用它。
这个答案实际上与我的问题有关(请参阅何时谈论getX()/ getY()),正如我所说的,我正在寻找一个更简单的解决方案。 如果您有多个编辑文本,这会很痛苦。
我更新了我的代码。 你可以检查一下,让我@m iav