天天看點

android fragment裡的EditText為什麼擷取了焦點,而軟鍵盤卻不彈出來

項目裡的一個fragment有一個EditText輸入框,在輸入文字後,做了其他操作,但是輸入框一直有光标在閃動。當再點選輸入框時,軟鍵盤死活不彈出來。除非切換到其他頁面再傳回來,才可以彈出。

今天終于明白了為什麼。因為之前的焦點沒有失去,是以當再點選輸入框時,無法觸發新的焦點事件,是以鍵盤就不會彈出來了。解決的辦法就是要清除之前的焦點。

第一步:

在布局檔案中,把EditText元素設定如下屬性(這樣會比較好):

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

第二步:

然後在代碼中調用clearFocus()方法清除焦點。

這樣就可以了。

我們還可以根據EditText的isInputMethodTarget()方法來決定是否要清除焦點。如果EditText是目前輸入法的目标,它就是true,否則為false。像我們本章提到的情況,屬于有焦點,但不是輸入法的目标,isInputMethodTarget()為false。代碼修改如下:

et.setOnClickListener((v)->{
            if(!et.isInputMethodTarget()){
                et.clearFocus();
                // ...other actions
            }
        });

           

謝謝閱讀!

繼續閱讀