Android 获取有规律资源Id解决方案
在多个有规律的资源ID获取的时候,可以使用getIdentifier方法来获取,来获取。
用到场景:工具类打成.jar包的时候,有时候会需要引用到res中的资源,这时候不能将资源一起打包,只能通过反射机制动态的获取资源.
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解决方案的更多相关文章
- 【转】 android获取设备唯一标识完美解决方案
		<p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; color: rgb(51, 51, 51); ... 
- android 获取设备唯一标识完美解决方案
		/** * deviceID的组成为:渠道标志+识别符来源标志+hash后的终端识别符 * * 渠道标志为: * 1,andriod(a) * * 识别符来源标志: * 1, wifi mac地址(w ... 
- Android获取状态栏高度、标题栏高度、编辑区域高度
		一.Activity界面的划分 简单说明一下(上图Activity采用默认Style,状态栏和标题栏都会显示):最大的草绿色区域是屏幕界面,红色次大区域我们称之为"应用程序界面区域" ... 
- 在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案
		转自:http://www.jianshu.com/p/89687f618837 原因分析 当我们在Android依赖库中使用switch-case语句访问资源ID时会报如下图所示的错误,报的错误 ... 
- [Android学习笔记]使用getIdentifier()获取资源Id
		使用getIdentifier()获取资源Id Android中可以使用getIdentifier()获取资源ID ex: 根据图片名称获取图片Id private int getImageResId ... 
- Android根据字符串型的资源名获取对应资源id
		有时候我们想动态的根据一个字符串资源名获得到对应的资源id,如根据不同的图片名称获得对应的图片,此时就应该考虑如何实现. 大家知道,在编译Android工程时,系统会自动生成一个静态资源类R,里面根据 ... 
- 【我的Android进阶之旅】Android使用getIdentifier()方法根据资源名来获取资源id
		有时候我们想动态的根据一个资源名获得到对应的资源id,就可以使用getResources().getIdentifier()方法来获取该id.然后再使用该id进行相关的操作. 1.Demo示例 下面用 ... 
- Android获取所有应用的资源id和对应的uri
		背景 在某些应用中,为了实现应用apk资源放入重复利用,或者使用反射得到本应用的资源,需要使用反射方式获得,但Resources类中也自带了这种获取方式,并且功能更加强大 你可以获取string,co ... 
- Android 通过名称获取资源ID
		当我们获取网络数据的时候,解析之后往往都是一个字符串,而不是资源id,所有我们没有办法直接使用,只能通过名称来获取到资源id, package com.example.administrator.de ... 
随机推荐
- [IOS]图标尺寸
			最新参考网址:https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/Ico ... 
- css样式规则的简要总结
			css与文档关联起来发挥作用. css文件中是各种样式规则,由选择器和声名块构成.声明块由多条声明组成.选择器是声明要作用的对象,声明是对具体规则的描述. 声明由属性和值组成,值或是属性的错误都会使该 ... 
- Eclipse用link方式安装插件
			其实eclipse安装插件更方便的方法就是直接扔到eclipse目录下的dropins文件夹,但如果插件比较多或者大的话,会让eclipse变得臃肿.下面介绍的用link方式可以避免这样的问题. 用l ... 
- iOS Dev (22) 文件、路径
			iOS Dev (22) 文件.路径 作者:CSDN 大锐哥 博客:http://blog.csdn.net/prevention 沙箱 Sandbox 的路径 和其他很多应用平台一样,iOS 也限定 ... 
- Android之修改部分字体颜色
			#01# 方法一: TextView textView = (TextView) view.findViewById(R.id.text); SpannableString ss = new Span ... 
- ACID:数据库事务正确执行的四个基本要素
			ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability).一个支持事务(T ... 
- 在PHP代码中处理JSON 格式的字符串的两种方法:
			总结: 在PHP代码中处理JSON 格式的字符串的两种方法: 方法一: $json= '[{"id":"1","name":"\u ... 
- C++进程间通信(常用理解例子)-买票
			#include "stdafx.h" #include <iostream>using namespace std; #include "windows.h ... 
- Linux: service network/Network/NetworkManager
			Linux:service network/Network/NetworkManager start 这三种有什么不同? 1.network service的制御网络接口配置信息改动后,网络服务必须从 ... 
- ApiDemos示例学习(1)——ApiDemos示例的导入
			---恢复内容开始--- 今天准备开始写这个ApiDemos示例的学习日记了,放在网上以监督自己! 首先是导入该示例.如果我们在配置Android开发环境是,利用Android SDK 安装包中的SD ... 
