【发布时间】:2014-09-29 18:21:53
【问题描述】:
因此,根据 Android 文档,Resources.getDrawable() 在 Jelly Bean 之前的 OS 版本中存在一个已知错误,其中别名 drawable 无法以正确的密度解析(因此 drawable-hdpi 中的 100px 图像在HDPI 设备):
注意:在 JELLY_BEAN 之前,当此处传递的资源 ID 是另一个 Drawable 资源的别名时,此函数将无法正确检索最终配置密度。这意味着如果别名资源的密度配置与实际资源不同,则返回的 Drawable 的密度将不正确,从而导致缩放不良。要解决此问题,您可以改为通过 TypedArray.getDrawable 检索 Drawable。将 Context.obtainStyledAttributes 与包含感兴趣的资源 ID 的数组一起使用来创建 TypedArray。
但是,我无法使用指定的说明实际解析Drawable。我写的一个实用方法:
@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 时,总是返回 null,我在 res/values/drawables.xml 中将其定义为:
<item name="my_drawable" type="drawable">@drawable/my_drawable_variation</item>
我在这里遗漏了什么,或者其他一些解决方法吗?
编辑:我在下面添加了一个解决方案。
【问题讨论】:
-
这里的“资源别名”可能是指
<bitmap>,每个:developer.android.com/guide/topics/resources/… 另外,您不会将可绘制资源的ID 传递给obtainStyledAttributes,但是而是属性的 ID:developer.android.com/reference/android/content/res/… -
@CommonsWare 啊,嗯。那可能是。如果是这样,对于我需要的东西可能没有好的解决方法(我不能使用位图别名,因为目标是另一个可绘制对象——而不是直接位图)。
标签: android android-resources android-drawable