有没有办法判断软键盘是否显示在活动中?
我试过
InputMethodManager manager = (InputMethodManager)
getSystemService(getApplicationContext().INPUT_METHOD_SERVICE);
manager.isActive(v)
但 isActive 仅在第一次显示键盘之前返回false,但如果kb出现然后被解除, isActive 也会返回true。
还有其他方法可以检查此问题。
感谢
答案 0 :(得分:12)
根据此POST
您无法检测是否显示软键盘,但您可以通过了解活动的View
已调整大小来间接了解软键盘。
假设您有一个ListView
,并且在EditText
底部,当用户点击EditText后显示软键盘时,您想要转到列表的底部。
您需要实现ListView
的子类,然后在ListActivity
或Activity
或View
中使用它。
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。 “检查配置更改”仅适用于手持键盘。
答案 1 :(得分:3)
您可以使用dumpsys
shell命令检测软件键盘的状态和坐标。
由于dumpsys需要permission.android.DUMP
,这是系统应用程序权限,因此您有两种选择:1。使用root设备授予此权限。 2.使用adb
中描述的dumpsys window InputMethod | grep "mHasSurface"
覆盖问题。
现在,运行以下命令:{{1}}以获取您要查找的数据。
答案 2 :(得分:-1)
这是我的想法。这是未经测试的。
@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.HARDKEYBOARDHIDDEN_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();
}
}
答案 3 :(得分:-2)
请检查您的活动的配置更改
这适用于 AndroidManifest.xml
您需要@Override您的Activity的公共方法 onConfigurationChanged (android.content.res.Configuration)才能处理,例如,这些值:
的 hardKeyboardHidden 下,
的键盘下,
keyboardHidden
对于所有可能的值,请检查http://developer.android.com/reference/android/content/res/Configuration.html
你会看到类似的东西:
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.
<强>更新强>
以下是我所谈论的具体示例:
http://developer.android.com/guide/topics/resources/runtime-changes.html
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
// Checks whether a hardware keyboard is available
if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show();
} else if (newConfig.hardKeyboardHidden ==
Configuration.HARDKEYBOARDHIDDEN_YES) {
Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show();
}
}