前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 动态获取资源的ID

Android 动态获取资源的ID

作者头像
胖虎哥
发布2023-05-10 19:10:43
2.4K0
发布2023-05-10 19:10:43
举报

如下办法

代码语言:javascript
复制
// 重要:注意不要添加后缀名!            Imageview.setBackgroundResource(getResources().getIdentifier("add","drawable",getPackageName()));

但是对于以上做法, 官方并不推荐,并且 getIdentifier这个写library的时候, 如果里面需要引用主程的资源且R所在的包名未知时还是很有用的(如果在gradle里修改了packageName, R所在的包名是和packageName不一样的,没法反射),当然也是有解决的办法: 如果愿意,是可以根据业务拼接出 “package_name.R.drawable.class” 的。但是如果这样的话,视具体情况一定有更好的解法。

以上摘自该评论

se of this function is discouraged. It is much more efficient to retrieve resources by identifier than by name.

在Nenus 5上,100,000次调用大概花费8500ms。另外,这个方法,需要一个Context的引用。

推荐的做法

代码语言:javascript
复制
// 在你的代码中使用此方法
public static int getResId(String variableName, Class<?> c) {
    try {
        Field idField = c.getDeclaredField(variableName);
        return idField.getInt(idField);
    } catch (Exception e) {
        e.printStackTrace();
        return -1;
    }
}
代码语言:javascript
复制
int id = getResId("icon", R.drawable.class);
Nenus 5, 100,000次,大概是1700ms。这个方法快多了,也不需要带入Context.
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 推荐的做法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档