2012-03-19 68 views
1

我使用AlertDialog.Builder創建對話框片段。我希望它只有一個EditText來獲取一些用戶文本輸入。它可以正常工作,但只要顯示對話框,IME鍵盤就不會彈出。該EditText上已經被選中,但用戶必須再次挖掘的EditText來獲得IME鍵盤彈出:IME鍵盤不會自動出現在對話框中?

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    EditText input = new EditText(getActivity()); 
    return new AlertDialog.Builder(getActivity()) 
     .setView(input) 
     .create(); 
} 

應該不會是其自身立即彈出?

謝謝

回答

2

不,顯然這不是默認行爲。 如果你真的想讓鍵盤自動出現,在你的EditText裏面模擬一個「tap」,這是我的工作原理(由於requestFocus的行爲不可靠,這比安裝showSoftInput更安全,而且你不需要微調鍵盤):

EditText tv = (EditText)findViewById(R.id.editText); 
tv.post(new Runnable() { 

      @Override 
      public void run() { 
       Log.d("RUN", "requesting focus in runnable"); 
       tv.requestFocusFromTouch(); 
       tv.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , tv.getWidth(), tv.getHeight(), 0)); 
       tv.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , tv.getWidth(), tv.getHeight(), 0)); 
      } 
     }); 

我覺得後面的鍵盤不開放的原因是,用戶必須有機會決定從哪裏開始第一次編輯之前看到整個窗口。

+0

這對我的作品。但水龍頭模擬對我來說看起來並不高雅。我終於從http://stackoverflow.com/a/8532417/94148找到了另一個解決方案。重點是requestFocus()需要一些時間才能生效。 – aleung 2013-01-13 13:46:51

0

試試這個:

((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)) 
    .showSoftInput(viewToEdit, 0);