android:focusableInTouchMode


轉載: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>

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM