代码之家  ›  专栏  ›  技术社区  ›  mxk

有没有什么无痛的方法可以触发对话框中编辑文本的软键盘?

  •  4
  • mxk  · 技术社区  · 15 年前

    我正在渲染 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 是编辑文本,并且 ListView.checkInputConnectionProxy() 做得很简单 return false 在ListView的默认实现中(由子类覆盖)。

    更糟糕的是,我找不到一种方法来设置允许代理IME请求的自定义ListView; AlertDialog.Builder.setView() 接受自定义ListView,但这不是InputMethodManager看到的ListView。

    有什么建议可以解决这个问题吗?

    2 回复  |  直到 11 年前
        1
  •  1
  •   Donal Rafferty    15 年前

    你有没有尝试过这样的事情,如果有,请道歉

    getBaseContext().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    
        2
  •  0
  •   JERiv    15 年前

    让我以一个大胖子作为开场白,我对ANDROID SDK一无所知。

    尽管如此,我还是建议: 编写一个requestKeyboard throwable。 让EditText抛出requestKeyboard。 通过这种方式,ListView可以处理丢弃,生成键盘,然后将输入返回到编辑文本。 这样mServedView==视图

    我想。