LevelListDrawable的使用

在開發Battery Widget時,需要在不同電量狀態下顯示對應的圖檔,比如電量100%時顯示電池全滿的圖,電量50%的時候顯示電池半滿的圖。那時很單純的用一堆 if else 來判斷,然後在裡面分別setImageResource()。當然這樣結果也是OK,但看到程式碼裡一堆判斷式,就覺得有點討厭。最近發現原來Android早就有替類似的需求設計了LevelListDrawable,而且是Since: API Level 1。(我真是太不用功了@@)

用法很簡單,範例如下:
1.首先當然得先準備好不同Level的圖檔。
2.在res/drawable 裡新增一個battery_level.xml 內容如下:
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:maxLevel="20" android:drawable="@drawable/battery_20" />
    <item android:maxLevel="40" android:drawable="@drawable/battery_40" />
    <item android:maxLevel="60" android:drawable="@drawable/battery_60" />
    <item android:maxLevel="80" android:drawable="@drawable/battery_80" />
    <item android:maxLevel="100" android:drawable="@drawable/battery_100" />
</level-list>
可以看出是用<level-list>標籤來包<item>,而每個<item>中分別指定數值範圍及圖檔。
3.在Layout中把這個上面這個xml指定給需要變換圖案的ImageView:
<ImageView
        android:id="@+id/imageview_battery"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ battery_level" >
</ImageView>
4.當電量變動時呼叫ImageView的setImageLevel()方法並帶入數值即可;若是在Widget內則可用RemoteViews的setInt()方法來設定:
remoteViews.setInt(R.id. imageview_battery, "setImageLevel", level);

參考連結:
http://developer.android.com/reference/android/graphics/drawable/LevelListDrawable.html

這個網誌中的熱門文章

Android Studio 如何調整字型大小

Android Studio 無法在實機上 Run/Debug 程式?

App在Google Play被停權與恢復的經驗分享