当用户按下后退按钮隐藏键盘时,我试图强制 EditText 控件失去焦点。已经有很多类似的问题了,但是几个小时后,我还没有能够让它发挥作用。
首先,简单介绍一下背景。我有一个带有自定义项目的 ListView。每一项都有多个 TextView 和一个 EditText。我有一个 AfterTextChanged() 方法保存编辑后的值。我设置了一种样式来突出显示具有焦点的字段。不幸的是,现在更明显的是,当您隐藏(软)键盘时,EditText 实际上并没有失去焦点,我认为这很令人困惑。如果没有键盘,我希望 EditText 不聚焦。
似乎最合理的解决方案是在活动中重写 OnBackPressed() ,如下所述here。不幸的是,我的方法似乎没有被调用。 IE。该字段仍然处于焦点状态,并且函数中的断点不会触发。
同样,活动上的 OnKeyUp() 侦听器不会触发,并且 Xamarin 似乎不支持 EditText 控件的 OnKeyUp 处理程序。
我并不是想在创建时抑制键盘或其他任何东西,因此使用任何不可见的控制技巧也无济于事。
显然很多人都有这个问题。我确信你们中的一个人已经解决了这个问题!您能分享一下您的解决方案吗?
太感谢了!
-凯伦
附:我不需要知道如何隐藏键盘。当用户用后退按钮隐藏键盘时,我需要采取行动。谢谢 :)
根据我的经验,按下后退按钮关闭键盘时 onBackPressed() (至少是活动中默认的 @Override )通常不会触发。据我所知,只有当按“后退”键对当前活动启动 finish() 时,它才会触发。
下面是一种通过监视视图大小的变化来了解键盘何时显示/隐藏的“hacky”方法。您还必须将 Activity 设置为android:windowSoftInputMode="adjustResize"
在 AndroidManifest.xml 中。
final View activityRootView = findViewById("Your main View");
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
//r will be populated with the coordinates of your view that area still visible.
activityRootView.getWindowVisibleDisplayFrame(r);
int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
//Keyboard is shown
}
if(heightDiff <= 100) {
//Keybaord not shown
}
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)