Android 软键盘隐藏调用在view.post()中未按预期工作,但在runOnUIThread()中工作正常
当我(从片段内部)调用以将键盘隐藏在runOnUiThread()中时,键盘会隐藏,但当我从activity.getCurrentFocus().post()内部执行相同操作时,键盘不会隐藏 1) 下面的代码有效Android 软键盘隐藏调用在view.post()中未按预期工作,但在runOnUIThread()中工作正常,android,android-input-method,postdelayed,android-runonuithread,Android,Android Input Method,Postdelayed,Android Runonuithread,当我(从片段内部)调用以将键盘隐藏在runOnUiThread()中时,键盘会隐藏,但当我从activity.getCurrentFocus().post()内部执行相同操作时,键盘不会隐藏 1) 下面的代码有效 activity.runOnUiThread(new Runnable() { @Override public void run()
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 rununuithread(可运行操作)-在UI线程上运行指定的操作。如果当前线程是UI线程,则立即执行该操作。如果当前线程不是UI线程,则将操作发布到UI线程的事件队列
b) public boolean post(Runnable操作)-导致将Runnable添加到消息队列中。runnable将在用户界面线程上运行
请有人解释一下,谢谢 我认为当您执行activity.getCurrentFocus().post()
时,它会在视图布局、重新调整大小和更新完成后执行。因此,如果您的视图不需要更新,就不会执行。您是否尝试添加日志/断点以查看它是否已执行?
如果执行了,可能是键盘刚刚恢复。Hello@beef,谢谢你的回答,代码正在执行,键盘根本不会隐藏。虽然有一些不同,在执行隐藏键盘调用之前,键盘上有一个“完成”按钮,在键盘顶部有一些单词建议,但在使用getCurrentFocus().post()隐藏键盘调用之后,完成按钮变成了一个回车按钮,键盘顶部不再有单词建议,但键盘并没有隐藏。不管怎么说,当我使用runOnUiThread时,键盘总是隐藏起来。@Ajit这很有趣。“完成”按钮变为“输入”按钮表明键盘被要求显示,但没有收到有关文本字段的正确信息。比如它是什么类型的文本字段。现在的问题是为什么要求键盘再次出现。。。也许用Traceview来看看叫什么