2013-07-11 70 views
12

我有一個EditTextButton。點擊按鈕我想打開EditText鍵盤,同時請求重點關注EditText,以便用戶直接在鍵盤上開始輸入,文字出現在EditText。 但在我的情況下,當我點擊按鈕時,它會打開鍵盤,但它不會將焦點設置在EditText上,因爲用戶必須再次單擊EditText才能在上面寫上它。什麼是問題。任何幫助或建議。EditText請求焦點不工作

代碼在按鈕的點擊

m_SearchEditText.requestFocus(); 
InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
inputMethodManager.toggleSoftInputFromWindow(m_SearchEditText.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0); 
+0

http://stackoverflow.com/questions/14327412/set-focus-on-edittext –

+0

有時這可能是,重點是EDITTEXT已經和你嘗試設置集中了,所以編輯光標不會移動到所需的editText。 解決方案:再次移除焦點並請求重點 –

回答

3

以下工作對我來說,應該有助於:

EditText yourEditText= (EditText) findViewById(R.id.yourEditText); 
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT); 
5

在你的manifest.xml寫:

<activity android:name=".MainActivity" 
android:label="@string/app_name" 
android:windowSoftInputMode="stateAlwaysVisible" /> 

並致電m_SearchEditText.requestfocus()oncreate()
OR,
嘗試:

if(m_SearchEditText.requestFocus()) { 
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
} 
21

保證的EditText在觸摸模式下可獲得焦點。你可以做到這一點。

在XML:

android:focusableInTouchMode="true" 

在Java中:

view.setFocusableInTouchMode(true); 

個人而言,我不相信這個參數的時XML定義。我總是通過以下兩行代碼請求重點:

view.setFocusableInTouchMode(true); 
view.requestFocus(); 

鍵盤肩出現在本身上,無需調用InputMethodManager。

它適用於大多數情況。一旦它不適合我,因爲由於處理相當繁重而丟失了對象的引用 - 請確保這不是您的問題。

+0

我遇到同樣的問題,這對我無效。這個問題是一個看似沒有共同解決方案的常見問題。我嘗試了其他人提出的幾個黑客攻擊,似乎沒有任何工作適合我的情況。 – BitsEvolved

+0

驚訝這沒有更多upvotes。我一整天都在瀏覽StackOverflow,這是唯一一個將EditText View設置爲專注於我的Activity加載的人。 現在我只需要弄清楚如何讓鍵盤不加載,除非用戶用這個解決方案點擊它。 –

+0

這樣一個投票不足的答案,但創業板!像魅力一樣工作! – sud007

9

在我的情況下,它通過添加一個處理程序,然後單擊按鈕並將焦點設置在另一個視圖中,焦點可以返回到您所需的視圖。

只是把這個在你的代碼:

final Handler handler = new Handler(); 
       handler.postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         lastview.getEditText().clearFocus(); 
         m_SearchEditText.requestFocus(); 
         InputMethodManager mgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 


         mgr.showSoftInput(mLastNameET, InputMethodManager.SHOW_IMPLICIT); 

        } 
       }, 100); 

我希望這是有益的

+0

這個工程!儘管你最好將延遲設置爲0 – Irshu

1

ü需要兩個XML屬性也實現這一點:

android:focusable="true" 
android:focusableInTouchMode="true" 

將它們添加到的EditText爲以及父佈局(這些視圖所在的任何佈局)。默認情況下這些都是錯誤的,所以焦點不會被賦予所請求的視圖。

來源:https://developer.android.com/reference/android/view/View.html#attr_android:focusable

後u顯示基於複選框選擇的EditText,在代碼中動態地添加下一個和以前的焦點。

希望這會有所幫助。

+0

,但這也不起作用 –

1

作爲this answer的擴展(由於聲譽,我沒有將它作爲評論添加)。

如果您想將延遲時間減少到零,請改爲使用handler.post()。 全碼:

final Handler handler = new Handler(); 
handler.post(new Runnable() { 
    @Override 
    public void run() { 
     lastview.getEditText().clearFocus(); 
     m_SearchEditText.requestFocus(); 
     InputMethodManager mgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 


     mgr.showSoftInput(mLastNameET, InputMethodManager.SHOW_IMPLICIT); 
    } 
});