EditText弹出键盘失败问题

  • 问题:EditText获取焦点并弹出键盘方法,在Activity onCreate调用时无效:
/**
 * 显示键盘
 *
 * @param et EditText
 */
public void showSoftInput(final EditText et) {
    et.requestFocus();
    InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
    imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT);
}
  • 原因:View的绘制流程与Activity生命周期不同步,即Activity onCreate完成,EditText仍然没有绘制出来

  • 解决方法:调用view的post方法,在run方法中弹出键盘

et.post(new Runnable() {
            @Override
            public void run() {
                showSoftInput(et);
            }
        });
);

因为post会将runnable放到队列的末尾,当post的任务执行,说明view已经完全绘制出来。关于view.post的细节可以到此链接了解https://www.jianshu.com/p/b1d5e31e2011

你可能感兴趣的:(EditText弹出键盘失败问题)