软键盘隐藏调用在view.post()中没有按预期工作,但在runOnUIThread()

时间:2016-04-10 07:40:33

标签: android android-input-method postdelayed android-runonuithread

当我(在片段内部)进行调用以隐藏runOnUiThread()内部的键盘时,键盘会隐藏,但是当我从activity.getCurrentFocus()。post()内部执行相同操作时,键盘会执行不要隐藏。

1)代码下方

activity.runOnUiThread(new Runnable()
                    {
                        @Override
                        public void run()
                        {
                            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
                            imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
                        }
            });

2)但这不是

 activity.getCurrentFocus().post(new Runnable()
                    {
                        @Override
                        public void run()
                        {
                            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
                            imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
                        }
            });

其中view = activity.getCurrentFocus();

android文档说明如下: -

a)public final void runOnUIThread(Runnable action) - 在UI线程上运行指定的操作。如果当前线程是UI线程,则立即执行该操作。如果当前线程不是UI线程,则该操作将发布到UI线程的事件队列

b)public boolean post(Runnable action) - 使Runnable被添加到消息队列中。 runnable将在用户界面线程上运行。

有人可以解释一下,提前致谢!

1 个答案:

答案 0 :(得分:0)

我认为当你执行activity.getCurrentFocus().post()时,它会在视图完成布局,重新调整大小和更新后执行。因此,如果您的视图不需要更新,那么将无法执行。您是否尝试添加日志/断点以查看它是否已执行? 如果它被执行,可能是键盘刚刚恢复。