我正在使用带有 setIconifiedByDefault(false) 的 SearchView。使用 Android 4.4.2 进行测试,我可以让键盘实际显示的唯一方法是查看 SearchView 的源代码并模仿它如何请求显示键盘。我已经尝试了我能找到/想到的所有其他方法,这是我能让键盘可靠显示的唯一方法。不幸的是,我的方法需要一些反思。
在 onCreateOptionsMenu(Menu) 中:
searchView.requestFocus();
searchView.post(new Runnable() {
@Override
public void run() {
showSoftInputUnchecked();
}
});
然后在InputMethodManager中创建一个调用隐藏方法“showSoftInputUnchecked”的方法:
private void showSoftInputUnchecked() {
InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
Method showSoftInputUnchecked = null;
try {
showSoftInputUnchecked = imm.getClass()
.getMethod("showSoftInputUnchecked", int.class, ResultReceiver.class);
} catch (NoSuchMethodException e) {
// Log something
}
if (showSoftInputUnchecked != null) {
try {
showSoftInputUnchecked.invoke(imm, 0, null);
} catch (IllegalAccessException e) {
// Log something
} catch (InvocationTargetException e) {
// Log something
}
}
}
}
与访问不在公共 API 中的方法的所有解决方案一样,我不能保证这不会与新版本的 Android 发生冲突。