Android 開發——元件獲得焦點時,同時為元件設定圓角與背景填充色
阿新 • • 發佈:2019-02-20
在 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 標籤也可以達到這個效果。