有没有办法判断是否显示软键盘?
有没有办法告诉软键盘是否显示在一个活动?
我试过了
InputMethodManager manager = (InputMethodManager) getSystemService(getApplicationContext().INPUT_METHOD_SERVICE); manager.isActive(v)
但isActive仅在第一次显示键盘之前返回false,但如果kb出现然后解除,则isActive也会返回true。
那么有没有其他的方法来检查这个问题。
谢谢
根据这个post
您无法检测是否显示软键盘,但您可以间接地知道显示软键盘时知道您的活动View
已resize。
想象一下你有一个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。 “检查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
这对于你的Activity类http://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(); } }