1. 程式人生 > >android selector詳解

android selector詳解

--> 改變字型的顏色
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 當前視窗失去焦點時 -->
    <item android:color="@android:color/black" android:state_window_focused="false" />
    <!-- 不可用時 -->
    <item android:color="@android:color/background_light" android:state_enabled="false" />
    <!-- 按壓時 -->
    <item android:color="@android:color/holo_blue_light" android:state_pressed="true" />
    <!-- 被選中時 -->
    <item android:color="@android:color/holo_green_dark" android:state_selected="true" />
    <!-- 被啟用時 -->
    <item android:color="@android:color/holo_green_light" android:state_activated="true" />
    <!-- 預設時 -->
    <item android:color="@android:color/white" />
</selector>

--> 改變按鈕的背景
?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 當前視窗失去焦點時 -->
    <item android:drawable="@drawable/bg_btn_lost_window_focused" android:state_window_focused="false" />
    <!-- 不可用時 -->
    <item android:drawable="@drawable/bg_btn_disable" android:state_enabled="false" />
    <!-- 按壓時 -->
    <item android:drawable="@drawable/bg_btn_pressed" android:state_pressed="true" />
    <!-- 被選中時 -->
    <item android:drawable="@drawable/bg_btn_selected" android:state_selected="true" />
    <!-- 被啟用時 -->
    <item android:drawable="@drawable/bg_btn_activated" android:state_activated="true" />
    <!-- 預設時 -->
    <item android:drawable="@drawable/bg_btn_normal" />
</selector>

那麼,在使用過程中,有幾點還是需要注意和了解的:

  1. selector作為drawable資源時,item指定android:drawable屬性,並放於drawable目錄下;
  2. selector作為color資源時,item指定android:color屬性,並放於color目錄下;
  3. color資源也可以放於drawable目錄,引用時則用@drawable來引用,但不推薦這麼做,drawable資源和color資源最好還是分開;
  4. android:drawable屬性除了引用@drawable資源,也可以引用@color顏色值;但android:color只能引用@color
  5. item是從上往下匹配的,如果匹配到一個item那它就將採用這個item,而不是採用最佳匹配的規則;所以設定預設的狀態,一定要寫在最後,如果寫在前面,則後面所有的item都不會起作用了。

另外,selector標籤下有兩個比較有用的屬性要說一下,添加了下面兩個屬性之後,則會在狀態改變時出現淡入淡出效果,但必須在API Level 11及以上才支援:

  • android:enterFadeDuration 狀態改變時,新狀態展示時的淡入時間,以毫秒為單位
  • android:exitFadeDuration 狀態改變時,舊狀態消失時的淡出時間,以毫秒為單位
--> listview中設定selector
最後,關於ListView的ListItem樣式,有兩種設定方式,一種是在ListView標籤裡設定android:listSelector屬性,另一種是在ListItem的佈局layout裡設定android:background。但是,這兩種設定的結果卻有著不同。同時,使用ListView時也有些其他需要注意的地方,總結如下

  1. android:listSelector設定的ListItem預設背景是透明的,不管你在selector裡怎麼設定都無法改變它的背景。所以,如果想改ListItem的預設背景,只能通過第二種方式,在ListItem的佈局layout裡設定android:background
  2. 當觸控點選ListItem時,第一種設定方式下,state_pressedstate_focusedstate_window_focused設為true時都會觸發,而第二種設定方式下,只有state_pressed會觸發。
  3. 當ListItem裡有Button或CheckBox之類的控制元件時,會搶佔ListItem本身的焦點,導致ListItem本身的觸控點選事件會無效。那麼,要解決此問題,有三種解決方案:

    • 將Button或CheckBox換成TextView或ImageView之類的控制元件
    • 設定Button或CheckBox之類的控制元件設定focusable屬性為false
    • 設定ListItem的根佈局屬性android:descendantFocusability="blocksDescendants"

    第三種是最方便,也是推薦的方式,它會將ListItem根佈局下的所有子控制元件都設定為不能獲取焦點。android:descendantFocusability屬性的值有三種,其中,ViewGroup是指設定該屬性的View,本例中就是ListItem的根佈局:

    • beforeDescendants:ViewGroup會優先其子類控制元件而獲取到焦點
    • afterDescendants:ViewGroup只有當其子類控制元件不需要獲取焦點時才獲取焦點
    • blocksDescendants:ViewGroup會覆蓋子類控制元件而直接獲得焦點

相關推薦

android selector

--> 改變字型的顏色 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 當前視窗失去焦點時 --> <item andr

android -------- WIFI

mov 取ip地址 fico alt b- else if 無線網 pan PC 今天簡單的來聊一下安卓開發中的Wifi,一些常用的基礎,主要分為兩部分: 1:WiFi的信息 2:WiFi的搜索和連接 現在app大多都需要從網絡上獲得數據。所以訪問網絡是在

Android Permission

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android ViewModel

1. ViewModel概述 2. 實現一個ViewModel 3. ViewModel的生命週期 4. 在fragments之間共享資料 5. ViewModel替換Loaders 6. 附加資源 1.

Android LiveData

官方文件翻譯 1.LiveData概述 1.1 使用LiveData的優點 1.2 使用LiveData物件 1.2.1 建立LiveData物件 1.2.2 觀察LiveData物件

Android Lifecycle(一)

官方文件翻譯 使用生命週期感知元件處理生命週期 Lifecycle Event State LifecycleOwner 實現一個自定義的LifecycleOwner 生命週期感

Android Animation

關於動畫的實現,Android提供了Animation,在Android SDK介紹了2種Animation模式: 1. Tween Animation:通過對場景裡的物件不斷做影象變換(平移、縮放、旋轉)產生動畫效果,即是一種漸變動畫; 2. Frame Animation:

Android開發之onTouch和onClick

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android UI之顏色資源的使用

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android開發--ContentProvider/Cursor的使用

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android Activity

生命週期 如上圖所示,Activity生命週期很簡單共七個生命週期函式,oncreate(),onrestart(),onstart(),onresume(),onpause(),onstop(),ondestroy(); 下面舉兩個例子來說明Activity生命週期函式呼叫關係。

Android Handler

Handler適用於執行緒間互動的一種機制。牽扯到四個類:Handler,Looper,MessageQueue,Message。 這四個類關係如下圖所示: 這個圖自己畫的,比較簡易,但是很能說明他們的關係 Handler:用於執行緒之間傳送訊息,一般Handler在主執行緒中被建

Eclipse整合Android NDK

1        目錄 Eclipse整合Android NDK說明... 1 2       為什麼要用NDK?... 2 3 &nbs

Android-Application

Preface 在學習一個SDK的時候,遇到了Application類的相關知識,其實之前也有學習過Application類的一些知識,但是日常開發中使用頻率不高,忘得差不多了.現在重新來總結下Application的使用 英語基礎好的可以去參考官方文件 官方文件 下面是官網對Application類

Android RecyclerView RecyclerView的動畫實現(移除、新增、改變、移動)和自定義動畫的實現

一丶新增刪除時候的重新整理問題 先上一下效果圖吧 1.為了方便起見我們還是先新增三個按鈕分別實現新增刪除和改變 2.在Adapter中寫呼叫方法並進行重新整理 public void remove(int position){ list.re

android Audio ( 二 )

android Audio 詳解( 二 ) 2018年01月04日 15:57:45 韓半仙 閱讀數:302更多 個人分類: linux驅動 2  tinyalsa    tinyalsa是Google在Android 4.0之

Android Notification

前幾天專案中有用到 Android 通知相關的內容,索性把 Android Notification 相關的知識都看了一遍,稍作梳理,在此做個總結,以備不時之需。 溫故而知新,可以為師矣~ 下圖是我對 Notification 做的思維導圖,也是本文的主要邏輯。  本文主要講述 Notificat

Android ConstraintLayout

轉自:Android ConstraintLayout詳解 1. 概述 在本篇文章中,你會學習到有關ConstraintLayout -- 一種構建於彈性Constraints(約束)系統的新型Android Layout。最終你將會在Android Studio中編輯與構建一個相對複

Android Service

各位肯定知道 Service 作為 Android 的四大元件之一是非常重要的。不過說實話,我實際開發專案中服務用的並不多,(可能和需求有關吧)但是筆試的時候,幾乎是必出的題目了,所以我們今天就來仔細的回顧一下 Service 。 1. 什麼是服務? Service 

android inflater

簡述: 簡單的說,LayoutInflater就是是一個用來解析xml佈局檔案的類。該篇文章將對LayoutInflater類進行分析,內容包括: LayoutInflater在哪裡建立 如何獲取LayoutInflater物件 檢視的建立過程(xml轉換成V