關於EditText焦點監聽

ChicoChen發表於2019-03-01

最近開發關於聊天介面,涉及到EditText的焦點獲取和失去來控制頁面中相關部分以及虛擬鍵盤的顯示和隱藏。每次遇到這樣的需求都要去Google或者Baidu,而且往往花費了時間卻沒有得到滿意的答案。

第一步:進入到頁面後我們預設EditText的父容器獲的焦點

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:gravity="center">

    <EditText
        android:id="@+id/et_content"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="10dp"
        android:layout_weight="1"
        android:background="#00000000"
        android:hint="input you content"
        android:textColor="#1E1F28"
        android:textColorHint="#ACAEC4"
        android:textSize="14sp" />
</LinearLayout>複製程式碼

這樣操作的目的是避免已進入頁面就彈出虛擬鍵盤,同時也是為了滿足我們的需求

第二步:我們需要EditText監聽OnFocusChangeListener

contentEdit.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                //獲取焦點
            }else{
                //失去焦點
            }
        }
    });複製程式碼

當我們點選EditText輸入框是我們會呼叫OnFocusChangeListener的onFocusChange方法,hasFocus引數返回true,通常這時候我們也會彈出虛擬鍵盤

監聽了EditText獲取焦點,那怎樣失去焦點呢?

不要著急,一步步來。。。

最後:失去焦點

contentEdit.cleanFocus();複製程式碼

失去焦點後,第二步中的onFocusChange方法返回hasFocus為false,這一步我們可以操作虛擬鍵盤隱藏。

注意:如果沒有操作contentEdit.cleanFocus()方法,onFocusChange只有在第一次獲取焦點後呼叫,後面就不會在呼叫,通常就是這部分容易忽略,往往就滿足不了我們的要求

相關文章