2010-10-26 61 views
4

Android: show soft keyboard automatically when focus is on an EditText安卓:對話框顯示軟鍵盤時自動對焦是一個EditText沒有工作

我讀過這篇文章,可以自動顯示虛擬鍵盤時,將顯示一個對話框。但是,它不適合我。任何想法爲什麼?儘管在出現對話框時編輯文本自動聚焦,但事件不會觸發。我也讀過onpostresume答案,但我不知道如何應用它。任何幫助表示讚賞。

final Dialog dialog = new Dialog(ThesisI.this); 
     dialog.setContentView(R.layout.budget_dialog); 


     final EditText et = (EditText) dialog.findViewById(R.id.textComments); 
     final Button enter = (Button) dialog.findViewById(R.id.buttonEnter); 
     final Button cancel = (Button) dialog.findViewById(R.id.buttonCancel); 

     enter.setOnClickListener(new View.OnClickListener() { 
     @Override 
    public void onClick(View v) { 

     } 
     }); 
     /**cancel */ 
     cancel.setOnClickListener(new View.OnClickListener() { 
     @Override 
    public void onClick(View v) { 
    } 
     });  
     dialog.show(); 

     et.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       if (hasFocus) { 
        dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 

       } 
      } 
     }); 

但是,我注意到,如果我改變焦點到按鈕,然後再次重點編輯文本。這個事件的作品,使用下面的代碼。

et.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       if (hasFocus) { 
        InputMethodManager inputMgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
         inputMgr.toggleSoftInput(0, 0); 
       } 
      } 
     }); 

有關如何應用它的任何想法?

回答

2

只是嘗試添加以下行之前"et.setOnFocusChangeListener"

((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)) 
        .showSoftInput(et, 2); 
13

你可以做什麼用postDelayed(Runnable)爲的EditText如下的嘗試,

   ettext.requestFocus(); 
       ettext.postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         InputMethodManager keyboard = (InputMethodManager) 
         getSystemService(Context.INPUT_METHOD_SERVICE); 
         keyboard.showSoftInput(ettext, 0); 
        } 
       },200); 
+0

只是後(),就足以讓我來說,這顯然是踢它在視圖變爲可見之後到隊列的後面。我通常對魔法值和任意延遲非常謹慎。 – EboMike 2014-12-30 07:34:08