android 使布局失去焦点,关于android:当我触摸其他东西时,如何使我的EditText失去焦点?...

我有些内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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值