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

第一次 不會彈出軟鍵盤 ,從第二次纔會正常,原因如上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章