跳到主要內容

LevelListDrawable 的使用

在開發 Battery Widget 時,需要在不同電量狀態下顯示對應的圖檔,比如電量 100% 時顯示電池全滿的圖,電量 50% 的時候則顯示半滿的圖。那時很單純的用一堆 if else 來判斷,然後在裡面分別 setImageResource()。當然這樣也不是不行,但看到程式碼裡一堆判斷式,就覺得有點討厭。最近發現原來 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() 方法並帶入數值即可;
imageView.setImageLevel(50);
若是在 Widget 內則可用 RemoteViews 的 setInt() 方法來設定:
remoteViews.setInt(R.id.imageview_battery, "setImageLevel", 50);

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

這個網誌中的熱門文章

Android Studio 如何調整字型大小

Android Studio版本:2.3.3

1. 開啟設定頁 (Mac: Android Studio -> Preferences) (Windows: File -> Settings)
2. 選擇 Editor -> Colors & Fonts -> Font
3. 可以看到有兩個預設的 Scheme (Default & Darcula),但此時這邊的 Size 跟 Font 都無法調整。請先點選 Save As... 建立一個你自己 Scheme,輸入自訂名稱後按 OK。


4. 此時 Scheme 會變為你剛建立的,而 Size 跟 Font 也都可以調整了^^

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

最近心情真像是洗了三溫暖~
前幾天把已經很久沒維護的 EZ App安裝器 稍微調整了 UI,修了修 Bug,提交更新。
幾個小時過去發現 Google Play 還沒反應,感覺有點怪...可能是系統忙碌吧。當下也沒想太多就跑去睡了。
隔天一早打開開發者控制台,登愣!又看到熟悉的景象... App 被停權了!!!


為什麼說"又"呢?
出來混總是要還的,被停權也不是第一次了。
多年前剛開始在 Google Play 上架時,學別人在商店描述裡加了一堆 Keyword,其實有沒有用也不知道。然後某次開發人員計劃政策調整後,這種行為被視為違規,於是一下子被停權兩隻 App。
畢竟是自己沒注意到政策調整,而且罪證確鑿,只好摸摸鼻子認了。不過明明是很簡單就能修正的問題,Google 總是完全不給機會就直接停權,手段實在狠毒!這也是最讓人難以接受的地方。

順帶一題,Google Play 的違規處分大概分為以下幾種:
拒絕:更新版本遭拒,但之前所發佈的版本仍會保留在 Google Play 商店中。下架:應用程式會從 Google Play 下架。必須提交符合規範的更新版本,才能讓應用程式重新上架。停權:應用程式會從 Google Play 下架。必須更改 package name,才能讓應用程式重新上架。這意味著將失去原本累積的下載數、統計資料和評分,一切重頭來過。終止開發者帳號:所有應用皆會下架,無法再上架新應用。"相關帳戶"也會一併處分,不允許再註冊新的開發者帳號。 我三次遇到的都是停權,但這次的原因是為什麼呢?
根據信裡的說明是違反了開發人員發佈協議的"其他商店"條款。
什麼是"其他商店"條款?

4.5 其他商店。凡是「產品」具有任何推廣其他商店之用途,藉此引導使用者透過這類替代性管道發佈 Android 軟體應用程式或遊戲,則一概禁止在「商店」中發佈或提供。

奇怪?我的 App 裡面沒有推廣其他應用程式商店啊?
信中有申訴的管道,寫信去問明白吧。網頁說可以用中文、英文、日文及韓文提出申訴,就直接寫中文吧。一來比較好溝通,同時看看都是講中文的會不會比較寬大為懷 XDD~

提出申訴後過了幾個小時,收到回覆了。
原來是我的 App 有"分享 APK 檔案給朋友"的功能。因此被視…

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

剛開始使用 Android Studio 總有些水土不服,遇到的其中一個問題是要 Run/Debug 程式時,總是跳出要我建立虛擬裝置(Emulator)的畫面:


可是我明明有接實機,DDMS 裡也有抓到ㄚ?
看了一下設定,原來在 Run/Debug Configurations 裡的 Target Device 預設是 Emulator。所以只要修改一下就好。

步驟如下:
1. Run -> Edit Configurations...
2. 選擇你的專案
3. 將 General 分頁中的 Target Device 改成 USB device 或 Show chooser dialog 即可


此外,你也可以從 Android Studio 的 Quick Start 畫面中選擇 Configure -> Project Defaults -> Run Configurations,然後修改其中 Android Application 的預設設定,這樣以後 Create 或 Import Project 時就會自動套用了。