有没有办法判断是否显示软键盘?

有没有办法告诉软键盘是否显示在一个活动?

我试过了

InputMethodManager manager = (InputMethodManager) getSystemService(getApplicationContext().INPUT_METHOD_SERVICE); manager.isActive(v) 

isActive仅在第一次显示键盘之前返回false,但如果kb出现然后解除,则isActive也会返回true。

那么有没有其他的方法来检查这个问题。

谢谢

根据这个post

您无法检测是否显示软键盘,但您可以间接地知道显示软键盘时知道您的活动View已resize。

想象一下你有一个ListView ,最下面是一个EditText ,当用户点击EditText后显示一个软键盘时,你想要到列表的底部。

您需要实现ListView的子类,然后将其用在ListActivityActivityView

 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。 “检查configuration更改”仅适用于手持键盘。

您可以使用dumpsys shell命令检测软件键盘的状态和坐标。

由于dumpsys需要permission.android.DUMP (系统应用程序权限),因此您有两个select:1.使用根设备授予此权限。 2.如我的其他答案中所述,使用adb覆盖问题。

现在,运行以下命令: dumpsys window InputMethod | grep "mHasSurface" dumpsys window InputMethod | grep "mHasSurface"来获取你正在寻找的数据。

这是我的想法。 这是未经testing。

 @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(); } } 

请检查您的活动的configuration更改

这为你的AndroidManifest.xml

这对于你的Activityhttp://developer.android.com/reference/android/app/Activity.html#onConfigurationChanged(android.content.res.Configuration

您将需要@覆盖您的活动的公共方法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(); } }