为了账号安全,请及时绑定邮箱和手机立即绑定

从Resources对象检索所有Drawable资源

从Resources对象检索所有Drawable资源

茅侃侃 2019-12-02 11:03:00
在我的Android项目中,我想遍历整个Drawable资源集合。通常,您只能使用以下方式通过其ID检索特定资源:InputStream is = Resources.getSystem().openRawResource(resourceId)但是,我想获取所有Drawable我事先不知道其ID的资源。给定项目中的资源后,是否有我可以循环访问的集合或一种获取资源ID列表的方法?或者,在Java中,有没有一种方法可以从R.drawable静态类中提取所有属性值?
查看完整描述

3 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

如果发现自己想要这样做,则可能是在滥用资源系统。看一下资产,以及AssetManager是否要遍历.apk中包含的文件。


查看完整回答
反对 回复 2019-12-02
?
HUWWW

TA贡献1874条经验 获得超12个赞

好的,这感觉有点骇人听闻,但这就是我通过Reflection提出的。(请注意,这resources是class的实例android.content.res.Resources。)


final R.drawable drawableResources = new R.drawable();

final Class<R.drawable> c = R.drawable.class;

final Field[] fields = c.getDeclaredFields();


for (int i = 0, max = fields.length; i < max; i++) {

    final int resourceId;

    try {

        resourceId = fields[i].getInt(drawableResources);

    } catch (Exception e) {

        continue;

    }

    /* make use of resourceId for accessing Drawables here */

}

如果有人拥有更好的解决方案,可以更好地利用我可能不知道的Android通话,那么我肯定希望看到他们!


查看完整回答
反对 回复 2019-12-02
?
慕村9548890

TA贡献1884条经验 获得超4个赞

我对Matt Huggins做出了很好的回答,并对其进行了重构以使其更加通用:


public static void loadDrawables(Class<?> clz){

    final Field[] fields = clz.getDeclaredFields();

    for (Field field : fields) {

        final int drawableId;

        try {

            drawableId = field.getInt(clz);

        } catch (Exception e) {

            continue;

        }

        /* make use of drawableId for accessing Drawables here */

    }   

}

用法:


loadDrawables(R.drawable.class);


查看完整回答
反对 回复 2019-12-02
  • 3 回答
  • 0 关注
  • 521 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信