Android 有没有办法判断是否显示了软键盘?
有没有办法判断活动中是否显示了软键盘 我试过了Android 有没有办法判断是否显示了软键盘?,android,Android,有没有办法判断活动中是否显示了软键盘 我试过了 InputMethodManager manager = (InputMethodManager) getSystemService(getApplicationContext().INPUT_METHOD_SERVICE); manager.isActive(v) 但是isActive仅在第一次显示键盘之前返回false,但是如果kb出现然后被取消,则isActive也会返回true 那么有没有其他方法来检查这个问题呢 谢谢请检查活动的配置更
InputMethodManager manager = (InputMethodManager)
getSystemService(getApplicationContext().INPUT_METHOD_SERVICE);
manager.isActive(v)
但是isActive仅在第一次显示键盘之前返回false,但是如果kb出现然后被取消,则isActive也会返回true
那么有没有其他方法来检查这个问题呢
谢谢请检查活动的配置更改
这适用于您的AndroidManifest.xml
这是你的活动课)
您需要@Override活动的公共方法onConfigurationChanged(android.content.res.Configuration)才能处理这些值:硬键盘隐藏,
键盘,
键盘隐藏 对于所有可能的值,请检查 你会看到这样的东西:
HARDKEYBOARDHIDDEN_NO
HARDKEYBOARDHIDDEN_UNDEFINED
HARDKEYBOARDHIDDEN_YES
KEYBOARDHIDDEN_NO
KEYBOARDHIDDEN_UNDEFINED
KEYBOARDHIDDEN_YES
KEYBOARD_12KEY
KEYBOARD_NOKEYS
KEYBOARD_QWERTY
KEYBOARD_UNDEFINED
public int hardKeyboardHidden // A flag indicating whether the hard keyboard
// has been hidden.
public int keyboard The kind of keyboard attached to the device.
public int keyboardHidden A flag indicating whether any keyboard is available.
在这里,您还可以阅读以下内容:
HARDKEYBOARDHIDDEN_NO
HARDKEYBOARDHIDDEN_UNDEFINED
HARDKEYBOARDHIDDEN_YES
KEYBOARDHIDDEN_NO
KEYBOARDHIDDEN_UNDEFINED
KEYBOARDHIDDEN_YES
KEYBOARD_12KEY
KEYBOARD_NOKEYS
KEYBOARD_QWERTY
KEYBOARD_UNDEFINED
public int hardKeyboardHidden // A flag indicating whether the hard keyboard
// has been hidden.
public int keyboard The kind of keyboard attached to the device.
public int keyboardHidden A flag indicating whether any keyboard is available.
更新:
下面是我所说的一个具体的例子:
据此,
您无法检测是否显示软键盘,但您可以通过知道活动的视图
已调整大小间接知道显示了软键板
假设您有一个列表视图
,在底部有一个编辑文本
,当用户单击编辑文本后显示软键盘时,您希望转到列表的底部
您需要实现列表视图
的子类,然后在列表活动
或活动
或视图
中使用它
public class ThreadView extends ListView {
public ThreadView(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
}
@Override
protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld) {
super.onSizeChanged(xNew, yNew, xOld, yOld);
if (yOld > yNew) {
setSelection(((ListAdapter) getAdapter()).getCount() - 1);
}
}
}
希望这有帮助
PS.“检查配置更改”仅适用于手动键盘 您可以使用
dumpsys
shell命令检测软件键盘的状态和坐标
因为dumpsys需要权限.android.DUMP
,这是一个系统应用程序权限,所以您有两个选项:1。使用根设备授予此权限。2.如my中所述,使用adb
覆盖问题
现在,运行以下命令:
dumpsys window InputMethod | grep“mhasurface”
以获取您要查找的数据。这是我的想法。这是未经测试的
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks whether a keyboard is available which is not hard keyboard
if ((newConfig.keyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO)&&(newConfig.keyboardHidden != Configuration.KEYBOARDHIDDEN_NO)) {
Toast.makeText(this, "soft keyboard visible", Toast.LENGTH_SHORT).show();
} else if (newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_YES) {
Toast.makeText(this, "soft keyboard hidden", Toast.LENGTH_SHORT).show();
}
}
感谢您的回复,但当kb出现或消失时,它没有捕获任何更改。您好,您应该搜索并举例说明,当您在清单上设置android:configChanges=“keyboardHidden”时,这将在您调用的任何活动中触发OnConfiguration Changed方法。如果重写该方法,则可以为活动传递新值,也可以获取当前值。我的意思是,使用它,你可以让你的应用程序监听键盘可见性更改之类的事件,并在你的活动中处理它们。我刚刚更新了响应,添加了一个来自你的示例,你会看到关于“自己处理配置更改”的更好信息,谢谢yeradis,我查一下告诉你later@yeradis配置更改只适用于硬键盘和方向更改,而不适用于软键盘。我相信这是解决此问题的唯一解决方案。这是一条路,至少在Android 2.2和迄今为止是如此。这是一个真正的痛苦,因为没有用于检测软键盘的API(就这点而言,在它的向上滑动动画上获得一个控制柄)。谢谢你的回答!为什么我刚才才看到这个?!花了很多时间尝试使用onMeasure、onLayoutChange等。。这是唯一有效的解决方案。最简单的也是!多谢多啦a梦,哦,我是说,@DiveInto.:汉克斯,你救了我一天。在使用recyclerView创建聊天应用程序的过程中,这个问题困扰了数小时。