轉載:https://blog.csdn.net/u010015108/article/details/52796785
大多數控件都可以獲取焦點,也就是處在選中狀態。如果android:focusable屬性值為true,表示可以通過鍵盤(虛擬鍵盤或物理鍵盤)或軌跡球將焦點移動到當前控件上。如果設置該屬性為false,則無法將焦點移到當前控件。
在默認情況下,觸摸一個按鈕雖然可以觸發控件的單擊事件,但無法使控件處在焦點狀態。而將android:focusableInTouchMode屬性設置為true,當觸摸值設為ture,當觸摸某個控件時,會先將焦點移動到被觸摸的控件上,然后需要再觸摸該控件才會響應單擊事件。但要注意,需要將android:focusable屬性設置為true,當前控件菜可以獲得焦點,否則當前控件無論使用任何方式都無法獲取焦點。
-----------------------------------------------------
focusable表示 移動光標時 是否能聚焦到組件上,比如按鈕,就是移動光標是按鈕會變成選中狀態,如果focusable為false,那么就跳過此 組件,下一個組件變成選中狀態。
focusableInTouchMode可以通過觸摸獲取焦點。
-------------------------------------------------
在項目中,一進入一個頁面, EditText默認就會自動獲取焦點。
那么如何取消這個默認行為呢?
在網上找了好久,有點 監聽軟鍵盤事件,有點 調用 clearFouse()方法,但是測試了都沒有! xml中也找不到相應的屬性可以關閉這個默認行為
解決之道:在EditText的父級控件中找一個,設置成
Android:focusable="true" android:focusableInTouchMode="true" 這樣,就把EditText默認的行為截斷了! <LinearLayout style="@style/FillWrapWidgetStyle" android:orientation="vertical" android:background="@color/black" android:gravity="center_horizontal" android:focusable="true" android:focusableInTouchMode="true" > <ImageView android:id="@+id/logo" style="@style/WrapContentWidgetStyle" android:background="@drawable/dream_dictionary_logo" /> <RelativeLayout style="@style/FillWrapWidgetStyle" android:background="@drawable/searchbar_bg" android:gravity="center_vertical" > <EditText android:id="@+id/searchEditText" style="@style/WrapContentWidgetStyle" android:background="@null" android:hint="Search" android:layout_marginLeft="40dp" android:singleLine="true" /> </RelativeLayout> </LinearLayout>