在对话框中,触发EditText软键盘的无痛方式是什么?

4

我正在将一个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()只会简单地return false(可以被子类覆盖)。更糟糕的是,我找不到设置自定义ListView的方法,以允许代理IME请求。虽然AlertDialog.Builder.setView()接受一个自定义ListView,但这不是InputMethodManager所看到的ListView。有什么建议可以解决这个问题吗?
2个回答

1

你尝试过类似这样的东西吗?如果你已经尝试过了,那我很抱歉。

getBaseContext().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

1
坦率地说,我不记得了 :-) 我目前并没有在做那个项目,但到时候我会再看一下。不管怎样,谢谢你的建议! - mxk

0

让我先说一下,我对Android SDK一无所知。

话虽如此,我建议: 编写一个requestKeyboard throwable。 让EditText抛出requestKeyboard。 这样ListView就可以处理throwable,生成键盘,然后将输入返回到EditText。 这样mServedView == view。

我想是这样的。


邪恶的想法,但我很确定在 onFocus/onClick 处理程序中抛出任何东西只会终止您的应用程序。 - mxk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接