问题
我们或许有这样的需求 : 当我们打开一个界面 弹出一个带有输入框的弹出框时,输入框能够自动聚焦,并弹出软键盘。
通过 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);
}
});
第一次 不会弹出软键盘 ,从第二次才会正常,原因如上。