首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:将"shrinkResources变为真“以保留所有可绘图,但删除其他未使用的资源。

Android:将"shrinkResources变为真“以保留所有可绘图,但删除其他未使用的资源。
EN

Stack Overflow用户
提问于 2016-12-22 10:39:26
回答 2查看 2.5K关注 0票数 8

我有一个包含大量绘图的项目,命名为"a“或"b”(例如a1_back、a2_back、b1_start、b2_start等)。这些绘图不在代码中使用,而是由以下代码使用:

代码语言:javascript
复制
String name = image.getName();//getName() returns for examle "a1_back"
res = getResources().getIdentifier(name, "drawable", getPackageName());

所以,在代码中我没有使用特定的字符串"a1_back“。这就是为什么当我设置"shrinkResources true“时,所有以"a”和"b“开头的绘图都会被删除。

我已经看到,您可以指定继续使用以下xml文件的资源:

代码语言:javascript
复制
<?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“开头的所有绘图)中设置模式,或者可能使其保留项目中的所有可绘图,但删除其他未使用的资源?

谢谢!)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-23 08:34:07

有个解决办法你可以用。为要保留的所有可绘制文件添加前缀。

代码语言:javascript
复制
@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;
    }
}

这里的诀窍

代码语言:javascript
复制
final String prefixName = String.format("prefix_%s", name);

资源收缩机制分析说,所有带有"prefix_“的绘图都可以使用,并且不涉及这些文件。

票数 3
EN

Stack Overflow用户

发布于 2017-06-15 13:50:33

当动态访问资源时,请使用此技巧,如本例在Android用户指南中解释的那样

代码语言:javascript
复制
String name = String.format("img_%1d", angle + 1);
res = getResources().getIdentifier(name, "drawable", getPackageName());
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41281187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档