Android 获取有规律资源Id解决方案

在多个有规律的资源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倍。

 

时间: 2024-10-18 18:24:24

Android 获取有规律资源Id解决方案的相关文章

浅谈android获取设备唯一标识完美解决方案

本文介绍了浅谈android获取设备唯一标识完美解决方案,分享给大家,具体如下: /** * deviceID的组成为:渠道标志+识别符来源标志+hash后的终端识别符 * * 渠道标志为: * 1,andriod(a) * * 识别符来源标志: * 1, wifi mac地址(wifi): * 2, IMEI(imei): * 3, 序列号(sn): * 4, id:随机码.若前面的都取不到时,则随机生成一个随机码,需要缓存. * * @param context * @return */ p

DEV控件中的ComboBoxEdit控件comboboxedit 绑定数据后 获取这数据的id

问题描述 comboboxedit绑定数据后获取这数据的id 解决方案 解决方案二: 解决方案三:英语太渣看不懂解决方案四:combobox只能获取EditValue,不知道你所谓的ID是什么意思.如果是数据中的一列,可以考虑使用Lookupedit,然后获取当前选择的行,再取id

android换肤功能 如何动态获取控件中背景图片的资源id?_Android

这个是在在做一个换肤功能时遇到的问题.   对于换肤,网上都有示例,可以从别的皮肤安装包中读取所要的资源,前提是你必须先持有这个资源的引用名称,像R.drawable.background(喂,这不是废话嘛).这个换肤的方案原理就是,自身应用的资源名称是R.drawable.background,那皮肤包中应该也是这个名称,然后通过这个名称获取该资源在皮肤包中的具体id,代码: //先获取本地资源引用名称,type name是R.drawable.background中的"drawable&qu

【我的Android进阶之旅】Android使用getIdentifier()方法根据资源名来获取资源id

有时候我们想动态的根据一个资源名获得到对应的资源id,就可以使用getResources().getIdentifier()方法来获取该id.然后再使用该id进行相关的操作. 1.Demo示例 下面用一个小Demo来讲解如何使用getResources().getIdentifier()方法来获取该id. 例如,新建一个Android项目,项目结构部分截图如下所示: MainActivity代码如下: package com.oyp.demo; import android.os.Bundle;

Android使用getIdentifier()获取资源Id的方法_Android

本文实例讲述了Android使用getIdentifier()获取资源Id的方法.分享给大家供大家参考,具体如下: int i= getResources().getIdentifier("icon", "drawable", getPackageName()) ; if(i>0) {Log.i("aa","aa");} else {Log.i("vbv","aa");} 或者:

Android中实现根据资源名获取资源ID

接触过Android开发的同学们都知道在Android中访问程序资源基本都是通过资源ID来访问.这样开发起来很简单,并且可以不去考虑各种分辨率,语言等不同资源显式指定. 痛点 但是,有时候也会有一些问题,比如我们根据服务器端的值取图片,但是服务器端绝对不会返回给我们的是资源id,最多是一种和文件名相关联的值,操作资源少的时候,可以维护一个容器进行值与资源ID的映射,但是多的话,就需要另想办法了. 便捷的方法 在这种情况下,使用文件名来得到资源ID显得事半功倍. 通过调用Resources的get

android换肤功能 如何动态获取控件中背景图片的资源id?

这个是在在做一个换肤功能时遇到的问题. 对于换肤,网上都有示例,可以从别的皮肤安装包中读取所要的资源,前提是你必须先持有这个资源的引用名称,像R.drawable.background(喂,这不是废话嘛).这个换肤的方案原理就是,自身应用的资源名称是R.drawable.background,那皮肤包中应该也是这个名称,然后通过这个名称获取该资源在皮肤包中的具体id,代码: //先获取本地资源引用名称,type name是R.drawable.background中的"drawable"

Android使用getIdentifier()获取资源Id的方法

本文实例讲述了Android使用getIdentifier()获取资源Id的方法.分享给大家供大家参考,具体如下: int i= getResources().getIdentifier("icon", "drawable", getPackageName()) ; if(i>0) {Log.i("aa","aa");} else {Log.i("vbv","aa");} 或者:

android资源id用于无布局代码

问题描述 android资源id用于无布局代码 Android的资源ID通常用于获取和修改XML定义布局组件,现在能不能将它们用于纯粹的应用唯一标识符?比如: 使用Android Resource ID ids.xml <item name="sensor_pressure" type="id"/> <item name="sensor_humidity" type="id"/> <item na