为什么我需要调用view.postRunnable来显示键盘

时间:2015-07-07 12:39:07

标签: android android-softkeyboard

我有这样的逻辑:当进入编辑活动时,我将首先显示弹出窗口,然后在onDismissListener回调中显示软键盘,但是当我在回调中直接调用 showKeyboard 时,软件键盘没有显示。只有我调用class Foo <RQ extends Request, RS extends Response> { RS foo(RQ rq) { return foo3(foo2(rq)); } RS foo2(RQ rq) { return null; } RS foo3(RS rs) { return rs; } } ,它才会按预期显示。同样,活动软键盘选项设置为view.postRunnable

android:windowSoftInputMode="stateHidden|adjustResize"

2 个答案:

答案 0 :(得分:1)

除非有深入了解UI框架内部设备的人来回答,否则每个人的回答都将是“最佳猜测”。以下是我最好的猜测:

这很可能与WindowWindowManager以及它们与Views和键盘的互动方式有关。

传递给方法的EditText有一个令牌到你的活动窗口,这是我的猜测:

如果窗口不在前台,则无法显示键盘。因此,当您post方法调用时,该方法将在Popup的Window消失后执行,而Activity中的Window位于Foreground中。

答案 1 :(得分:0)

onDismiss()回调很可能是从非UI线程调用的,因此您无法直接更新UI。这就是您需要使用view.postRunnable()将其发布到UI线程的原因。