問題
我們或許有這樣的需求 : 當我們打開一個界面 彈出一個帶有輸入框的彈出框時,輸入框能夠自動聚焦,並彈出軟鍵盤。
通過 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);
}
});
第一次 不會彈出軟鍵盤 ,從第二次纔會正常,原因如上。