Android Dialog 中的EditText自动获取焦点弹出软键盘

问题

我们或许有这样的需求 : 当我们打开一个界面 弹出一个带有输入框的弹出框时,输入框能够自动聚焦,并弹出软键盘。
通过 dialog 获取 editText ,
editText.requestFocus() ; 方法并没有效果。

解决1 亲测可行

手动弹出软键盘

//弹出软键盘
    public void showKeyboard(EditText editText) {
    //其中editText为dialog中的输入框的 EditText 
        if(editText!=null){
            //设置可获得焦点
            editText.setFocusable(true);
            editText.setFocusableInTouchMode(true);
            //请求获得焦点
            editText.requestFocus();
            //调用系统输入法
            InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            inputManager.showSoftInput(editText, 0);
        }
    }

如果在 自定义dialog中

//调用系统输入法
 InputMethodManager inputManager = (InputMethodManager) editText
                    .getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
 inputManager.showSoftInput(control_input_pass, 0);

在activity dialog.show()方法后调用 ,由于在调用时可能dialog界面还未加载完成,还没显示在屏幕上,此时editText 为空,因此加上一个延时,延迟显示。

handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                showKeyboard(editText);
            }
        },300);

方案2

dialog 的监听方法

 dialog.setOnShowListener(new OnShowListener() {  
        @Override
            public void onShow(DialogInterface dialog) {  
                  showKeyboard(editText);
            }  
        });  

第一次 不会弹出软键盘 ,从第二次才会正常,原因如上。

你可能感兴趣的:(体验)