因此,根據Android文檔,Resources.getDrawable()
在Jelly Bean之前有一個操作系統版本的已知錯誤,其中別名drawables將無法用正確的密度解析(所以100px在繪製 - 華電國際形象得到縮放爲150像素的華電國際設備上):如何使用TypedArray獲取Drawable(帶有可繪製別名)
注:此前JELLY_BEAN,此功能將無法正常時檢索資源ID在這裏通過了最終的配置密度是一個別名到另一個可繪製資源。這意味着如果別名資源的密度配置與實際資源不同,則返回的Drawable的密度將不正確,從而導致縮放不良。要解決此問題,您可以通過TypedArray.getDrawable檢索Drawable。將Context.obtainStyledAttributes與包含感興趣的資源ID的數組一起使用來創建TypedArray。
但是,我沒有能夠使用指定的指令實際解決Drawable
。我已經寫了一個實用的方法:
<item name="my_drawable" type="drawable">@drawable/my_drawable_variation</item>
是:
@NonNull
public static Drawable resolveDrawableAlias(@NonNull Context ctx, @DrawableRes int drawableResource) {
final TypedArray a = ctx.obtainStyledAttributes(new int[] { drawableResource });
final Drawable result = a.getDrawable(0);
a.recycle();
return result;
}
當我傳遞一個資源ID被拉伸的別名,這是我在res/values/drawables.xml
已經定義爲始終返回null有什麼我在這裏失蹤,或其他解決方法?
編輯:我在下面添加了一個解決方案。
這可能是由「資源別名」在這裏,他們的意思''每:HTTP://開發商.android.com/guide/topics/resources/provide-resources.html#AliasResources此外,您不會將可繪製資源的ID傳遞給'obtainStyledAttributes',而是將屬性ID:http:// developer。 android.com/reference/android/content/res/Resources.Theme.html#obtainStyledAttributes%28int[]%29 –
CommonsWare
2014-09-29 18:24:48
@CommonsWare嗯,嗯。那可能是。如果是這樣,可能沒有好的解決方法,我需要什麼(我不能使用位圖別名,因爲目標是另一個Drawable - 不是直接位圖)。 – kcoppock 2014-09-29 18:26:08