1. 程式人生 > >Android 開發——元件獲得焦點時,同時為元件設定圓角與背景填充色

Android 開發——元件獲得焦點時,同時為元件設定圓角與背景填充色

在 Android 開發時,當用戶手指移至或點選某個元件,為了給使用者一個資訊(即元件獲得了焦點),可以給元件設定不同的背景填充色。

一開始我在 drawable 目錄下新建了一個 xml 檔案,內容如下。(solid:元件填充色屬性  stroke:元件邊框屬性  corners:元件圓角屬性)

​​​​        <?xml version="1.0" encoding="utf-8"?>
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle">
            <solid android:color="@color/clicked"/>
            <stroke android:width="0.01dp" android:color="@color/border"/>
            <corners android:radius="18dp"/>
        </shape>​​​​

將上面的 xml 應用到元件上,設定元件的 background 為上面的那個xml 檔案就可以了。

但這樣設定只能單方面設定元件的背景填充色、邊框、圓角,而不能使元件獲得焦點後改變元件填充色,如果在元件的 xml 裡為元件設定兩個 background ,這樣不行吧,那在邏輯裡設定元件獲得焦點後的背景填充色又比較麻煩。為了達到這樣的效果,我重新修改了我的 xml 檔案的內容。

        <?xml version="1.0" encoding="utf-8"?>
        <selector xmlns:android="http://schemas.android.com/apk/res/android">
            <item android:state_window_focused="false">
                <shape android:shape="rectangle">
                    <solid android:color="@color/release"/>
                    <stroke android:width="0.01dp" android:color="@color/border"/>
                    <corners android:radius="18dp"/>
                </shape>
            </item>

            <item android:state_pressed="true">
                <shape android:shape="rectangle">
                    <solid android:color="@color/clicked"/>
                    <stroke android:width="0.01dp" android:color="@color/border"/>
                    <corners android:radius="18dp"/>
                </shape>
            </item>
        </selector>

selector 裡的第一個 item 是設定元件沒有獲得焦點時的 style ,第二個 item 是設定元件獲得焦點後的 style 。除了用selector 標籤可以達到這個效果外,layer-list 標籤也可以達到這個效果。