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);
            }  
        });  

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值