在多个有规律的资源ID获取的时候,可以使用getIdentifier方法来获取,来获取。

用到场景:工具类打成.jar包的时候,有时候会需要引用到res中的资源,这时候不能将资源一起打包,只能通过反射机制动态的获取资源.

public class Resources int getIdentifier (String name, String defType, String defPackage)
Return a resource identifier for the given resource name.

param defType:"layout","string","drawable","style","color","array"
Parameters
name The name of the desired resource.
defType Optional default resource type to find, if "type/" is not included in the name. Can be null to require an explicit type.
defPackage Optional default package to find, if "package:" is not included in the name. Can be null to require an explicit package.
Returns
  • int The associated resource identifier. Returns 0 if no such resource was found. (0 is not a valid resource ID.)

from: http://developer.android.com/reference/android/content/res/Resources.html

  

public static int getDrawableId(Context paramContext, String paramString) { return paramContext.getResources().getIdentifier(paramString, "drawable", paramContext.getPackageName()); } 

 

对于这个方法,官方不推荐:

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

更好的解决方案,是参照另外一篇博客的使用反射实现的。

http://www.liaohuqiu.net/cn/posts/android-get-resource-id-by-string/

示例代码:

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;}
}

  

使用:

int id = ResourceMan.getResId("icon", R.drawable.class);

  

这种效率据说比第一种高了4倍。

 

Android 获取有规律资源Id解决方案相关推荐

  1. android 获取应用的资源id和uri

    2019独角兽企业重金招聘Python工程师标准>>> 在某些应用中,为了实现应用apk资源放入重复利用,或者使用反射得到本应用的资源,需要使用反射反射方式获得,但Resources ...

  2. android获取控件的id(标识符)-根据控件id获取对应的值或控件名字-动态获取R.string的值

    更多其他页面-自定义View-实用功能合集:点击查看 项目中需要动态获取资源R.string的值,记录一下解决方案. demo链接: link. 直接先上个示例,下面再有详细解说: @Override ...

  3. Android - 获取移动端设备ID标识,分情况

    目前需求:未登录的用户(游客)需要与客服实时通讯,要怎么区分用户消息? 思路:获取游客的设备ID,以此为标识传给服务器来查询/发送信息,一设备为一用户. 那设备ID是什么?怎么获取呢? 设备ID,就是 ...

  4. android获取设备唯一标识完美解决方案

    转自:https://blog.csdn.net/aa1733519509/article/details/50053553 有时需要对用户设备进行标识,所以希望能够得到一个稳定可靠并且唯一的识别码. ...

  5. android获取短信息,从其ID Android获取短信详细信息

    我想得到短信的细节(数字,正文,来的时间);我只知道短信的身份. 我可以使用此ID查询"content:// sms"并获取详细信息吗? 目前,我可以循环查询每条消息并获取详细信息 ...

  6. Android获取本地图片缩略图终极解决方案

    QAQ学Android真的还是要在项目中获得锻炼,脱离实际一切都是耍流氓哼唧~! 花了一下午时间搞定了项目中要实现的:获取本地图片缩略图并显示在ListView上的,并且点击要能获得该图片文件路径功能 ...

  7. android 获取网络视频资源,Android 加载网络视频(url地址)第三方框架简用

    正好最近做项目有个需要加载网络视频技术,就找了找,碰到了这个开源的框架.主要还是网络请求下来的视频地址,然后简单的,赋一下值,非常OK.不过限自己练习用毕竟看需求的嘛,不多介绍复制用吧. 先看看效果大 ...

  8. 【Android 安装包优化】移除无用资源 ( 自动移除无用资源 | 直接引用资源 | 动态获取资源 id | Lint 检查资源 )

    文章目录 一.自动移除无用资源 ( 不推荐使用 ) 二.直接引用资源与动态获取资源 1.直接引用资源 2.动态获取资源 id 三.Lint 检查资源 四.参考资料 一.自动移除无用资源 ( 不推荐使用 ...

  9. Android开发之SDK开发获取资源id报错的问题

    我们在开发SDK的时候有时候需要兼容Eclipse版本和AS版本,AS版本就不说了没多大问题,主要是Eclipse版本会有问题.当开发之使用Eclipse开发的时候接入jar包(AS打包成aar,解压 ...

  10. Android之使用getIdentifier()获取资源Id

    使用getIdentifier()方法可以方便的获各应用包下的指定资源ID. 主要有两种方法: (1)方式一 Resources resources = context.getResources(); ...

最新文章

  1. python绘制曲线图-python怎么画曲线图
  2. 引用第三方高德地图接口---使用js脚本进行开发地图定位的步骤
  3. canvas反向裁剪技巧
  4. arm-linux-androideabi-addr2line
  5. 对比Excel学Python(二)数据可视化
  6. 如何在手机上查看APP原型
  7. 华为实习面经(技术面+主管面)
  8. 带有风的诗词_带有风字的诗句
  9. 自动驾驶综述|定位、感知、规划常见算法汇总
  10. 从小玩到大的铁哥们突然跟我表白,该怎么面对?
  11. nargin与varargin的用法
  12. 数据类型、变量、字符串(工匠工坊第二课)
  13. leetcode---1758.生成交替二进制字符串的最少操作数
  14. 2020/01/03 基于sharedLibrary进行CICD流程的优化(一)
  15. 微信OAuth授权获取用户OpenId-JAVA(个人经验)
  16. 微信小程序--嘟嘟会议--会议发布和我的会议查看
  17. 8、【循环练习-蜗牛爬井】井里有一只蜗牛,他白天往上爬5米,晚上掉3.5 米,井深56.7米,计算蜗牛需要多少天才能从井底到爬出来。
  18. ElGamal算法实现
  19. SAP中库存周转率算法
  20. 猎豹浏览器抢票功能遭屏蔽 要“约谈”12306

热门文章

  1. 海量数据挖掘MMDS week3:流算法Stream Algorithms
  2. Git版本控制:Git分支处理
  3. astc贴图格式是什么意思_SP多象限UV贴图的使用方法!
  4. centos7 默认启动项_如何在centos7中搭建 ISCSI 服务
  5. matlab软件及基础实验第8单元,知到高等数学与MATLAB启蒙第八单元章节测试答案...
  6. python窗口怎么显示我输入的_Python分别用两个窗口显示和输入
  7. 蓝桥杯2016年第七届C/C++省赛B组第四题-快速排序
  8. Kotlin — 协程简介与使用
  9. Django model 反向引用中的related_name
  10. ORACLE错误6650