当用户按下后退按钮以隐藏键盘时,我试图强制 EditText 控件失去焦点。已经有很多类似的问题了,但是几个小时后,我还是没能解决。
首先,简单介绍一下上下文。我有一个带有自定义项的 ListView。每个项目都有几个 TextView 和一个 EditText。我有一个 AfterTextChanged() 方法保存编辑后的值。如果它有焦点,我有一个样式设置来突出显示该字段。不幸的是,现在更明显的是,当您隐藏(软)键盘时,EditText 实际上并没有失去焦点,我认为这令人困惑。如果没有键盘,我希望 EditText 不被聚焦。
看起来最合理的解决方案是在 Activity 中覆盖 OnBackPressed(),如所述 here .不幸的是,我的方法似乎没有被调用。 IE。该字段仍处于焦点状态,并且函数中的断点不会触发。
同样, Activity 上的 OnKeyUp() 监听器不会触发,并且 Xamarin 似乎不支持 EditText 控件的 OnKeyUp 处理程序。
我并没有试图在创建时抑制键盘或其他任何东西,因此使用任何不可见的控制技巧也无济于事。
很明显,很多人都有这个问题。我相信你们中的一个已经解决了!能否分享一下您的解决方案?
非常感谢! -凯伦
附言我不需要知道如何隐藏键盘。当用户使用后退按钮隐藏键盘时,我需要采取行动。谢谢:)
最佳答案
根据我的经验,按下后退按钮关闭键盘时,onBackPressed()(至少是 Activity 中默认的@Override)通常不会触发。据我所知,它只会在 Back press 启动当前 Activity 的 finish() 时触发。
下面是一种通过监视 View 大小的变化来了解何时显示/隐藏键盘的“hacky”方法。您还必须在 AndroidManifest.xml 中将 Activity 设置为 android:windowSoftInputMode="adjustResize"
。
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
}
}
});
关于android - 按下后退时强制 EditText 失去焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18197473/