我将EditText
呈现为列表样式AlertDialog
的一个元素(由默认的ListView
实现支持)。我有点期望这种情况不会改变EditText的行为,但确实如此:点击EditText不再产生软键盘。
经过一个小时的焦点设置和点击处理程序后,我厌倦了并调试到InputMethodManager.showSoftInput()
,发现了这个:
public boolean showSoftInput(View view, int flags,
ResultReceiver resultReceiver) {
...
if (mServedView != view && (mServedView == null
|| !mServedView.checkInputConnectionProxy(view))) {
return false;
}
...
}
}
这里的问题是mServedView
是支持对话框的ListView,而view
是EditText,ListView.checkInputConnectionProxy()
在ListView的默认实现中只做return false
(被子类覆盖)。
更糟糕的是,我找不到设置自定义ListView的方法,该ListView允许代理IME请求; AlertDialog.Builder.setView()
接受自定义ListView,但这不是InputMethodManager看到的ListView。
有任何建议如何解决这个问题?
答案 0 :(得分:1)
你有没有试过这样的事情,如果你有
的话,道歉getBaseContext().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
答案 1 :(得分:0)
让我以一个大胖子开头,我知道关于ANDROID SDK的事情。
据说我会建议: 写一个requestKeyboard throwable。 让您的EditText抛出requestKeyboard。 这样ListView可以处理throwable,生成键盘,然后将输入返回到编辑文本。 这样mServedView == view
我想。