我有一个包含大量绘图的项目,命名为"a“或"b”(例如a1_back、a2_back、b1_start、b2_start等)。这些绘图不在代码中使用,而是由以下代码使用:
String name = image.getName();//getName() returns for examle "a1_back"
res = getResources().getIdentifier(name, "drawable", getPackageName());所以,在代码中我没有使用特定的字符串"a1_back“。这就是为什么当我设置"shrinkResources true“时,所有以"a”和"b“开头的绘图都会被删除。
我已经看到,您可以指定继续使用以下xml文件的资源:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@layout/l_used_c"
tools:discard="@layout/unused2" />但是我有很多绘图的方法,而且不想分别指定每一个。是否有一种方法可以在“tools: keep”(保留以"a“或”b“开头的所有绘图)中设置模式,或者可能使其保留项目中的所有可绘图,但删除其他未使用的资源?
谢谢!)
发布于 2017-05-23 08:34:07
有个解决办法你可以用。为要保留的所有可绘制文件添加前缀。
@Nullable
private Drawable getDrawableByName(@NonNull final Context context, @NonNull final String name) {
final String prefixName = String.format("prefix_%s", name);
return getDrawable(context, prefixName);
}
@Nullable
protected Drawable getDrawable(@NonNull final Context context, @NonNull final String name) {
final Resources resources = context.getResources();
final int resourceId = resources.getIdentifier(name, "drawable", context.getPackageName());
try {
return resources.getDrawable(resourceId, context.getTheme());
} catch (final Resources.NotFoundException exception) {
return null;
}
}这里的诀窍
final String prefixName = String.format("prefix_%s", name);资源收缩机制分析说,所有带有"prefix_“的绘图都可以使用,并且不涉及这些文件。
发布于 2017-06-15 13:50:33
当动态访问资源时,请使用此技巧,如本例在Android用户指南中解释的那样
String name = String.format("img_%1d", angle + 1);
res = getResources().getIdentifier(name, "drawable", getPackageName());https://stackoverflow.com/questions/41281187
复制相似问题