Android-使用getIdentifier()获取资源Id_普通网友的博客-程序员宅基地

技术标签: java  移动开发  数据库  

使用getIdentifier()获取资源Id 

int i=  getResources().getIdentifier("icon", "drawable", getPackageName()) ;
if(i>0)      
  {Log.i("aa","aa");}
else      
  {Log.i("vbv","aa");}

或者 

int resID = getResources().getIdentifier("org.loveandroid.androidtest:drawable/gallery_photo_1",null,null);
 
int resID = getResources().getIdentifier("org.anddev.android.testproject:drawable/bug", null, null); 
// or 
int resID = getResources().getIdentifier("bug", "drawable", "org.anddev.android.testproject");
 
//第一个参数:full_package:type/filename_without_ending是这种格式 然后其他的可以为null

 

int idFlag = getResources().getIdentifier(getPackageName() + ":drawable/flag", null, null);     
// 或是     
int idFlag = getResources().getIdentifier("flag", "drawable", getPackageName());    

 

var Drawable[] dw = new Drawable[10];     
    
for (int i = 1; i <= 10; i++) {     
  int id = getResources().getIdentifier("flag" + i,  "drawable", getPackageName());     
  dw[i-1] = getResources().getDrawable(id); 
}  

 

//用反射法 可以得到 所有的资源
private void      
  _DumpAllResourceIDs(Class<?> classType)      
    throws IllegalArgumentException {     
  Field[] fIDs = classType.getFields();     
             
  try {     
    for (int i = 0; i < fIDs.length; i++) {     
      Field fld = fIDs[i];     
      int nID = fld.getInt(null);     
      Log.d("dbg",     
        classType.getSimpleName() + " " +      
        i + ": " +      
        fld.getName() + "=" +     
        nID);     
    }     
  } catch (Exception e) {     
    throw new IllegalArgumentException();     
  }     
}   

 

import java.lang.reflect.Field;     
...     
  _DumpAllResourceIDs(R.layout.class);     
  _DumpAllResourceIDs(R.drawable.class);   

 

//结果
R$layout 0: main=2130903040    
R$layout 1: small_spinner_dropdown_item=2130903041    
R$drawable 0: icon=2130837504  

有时候我们需要动态的取得一个一个控件的id,然后进行操作,经过在网上查找,找到了一下方法 

getResources().getIdentifier("textView01", "id", "cn.xxx.xxx"); 

第一个参数为ID名,第二个为资源属性是ID或者是Drawable,第三个为包名。 

做项目过程中遇到一个问题,从数据库里读取图片名称,然后调用图片。直接用R.drawable.?无法调用。查了好多地方最后找到了个方法,分享给大家,希望有帮助。 
主要由两种方法,个人建议第二种。 
1. 不把图片放在res/drawable下,而是存放在src某个package中(如:com.drawable.resource),这种情况下的调用方法为: 
String path = "com/drawable/resource/imageName.png"; 
InputStream is = getClassLoader().getResourceAsStream(path); 
Drawable.createFromStream(is, "src"); 

2. 如果还是希望直接使用res/drawable中的图片,就需要通过下面的方法了: 
假设创建工程的时候,填写的package名字为:com.test.image 
int resID = getResources().getIdentifier("imageName", "drawable", "com.test.image"); 
Drawable image = getResources().getDrawable(resID);

 

本文转自:http://wen66.iteye.com/blog/1224201

转载于:https://www.cnblogs.com/sishuiliuyun/p/4249582.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dibe49481448/article/details/101235730

智能推荐

Java关键字、注释、标识符规则-程序员宅基地

1.关键字java开发中已被占用并赋予特殊含义的单词,在创造java语言时,就预先规定的语法规则。如:public class static …特点:全部小写2.注释(三种)单行注释 //多行注释 /* 被注释的内容 / 快捷键:ctrl +shift+/文档注释/* 被注释的内容 */ 常用在一个类的前面,声明该类的功能,作者,和编写时间3.标识符除了java预先占用的单词以外,剩下的我们自己取的名字包含:变量名 类名 方法名(1)变量名、方法名取名可

vc ++ unicode 编码_c++ 字符串变量unicode编码-程序员宅基地

一、什么是Unicode先从ASCII说起,ASCII是用来表示英文字符的一种编码规范。每个ASCII字符占用1个字节,因此,ASCII编码可以表示的最大字符数是255(00H―FFH)。其实,英文字符并没有那么多,一般只用前128个(00H―7FH,最高位为0),其中包括了控制字符、数字、大小写字母和其它一些符号。而最高位为1的另128个字符(80H―FFH)被称为“扩展ASCII”,一_c++ 字符串变量unicode编码

idea工具利用鼠标控制字体_idea根据鼠标调整字体-程序员宅基地

关于idea利用鼠标滚轮放大缩小字体的设置打开idea,左键点击工具栏里面的File–>Settings…图片: Settings…–>Keymap-到搜索框–>输入font右键单击Decrease Font Size(设置字体缩小)–>左键单击AddMouse Shortcut左键单击AddMouse Shortcut-点击弹框,按住Ctrl+鼠标滚轮往下,点击OK保存,则设置成功以上就是今天的分享@ajian..._idea根据鼠标调整字体

ClassNotFoundException: com.alibaba.csp.sentinel.log.Logger_classnotfoundexception com.alibaba.csp.sentinel.sp_花荣白起的博客-程序员宅基地

com.alibaba.csp.sentinel.log.Logger 类没找到sentinel-core-1.7.1 以下 缺少 com.alibaba.csp.sentinel.log.Logger 接口异常依赖<!-- sentinel依赖--><dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-st_classnotfoundexception com.alibaba.csp.sentinel.spi.spiloader

最小费用最大流问题-程序员宅基地

  复杂网络中,单源单点的最小费用最大流算法(MCMF)应用广泛。  在实际网络问题中,不仅考虑从 Vs 到 Vt 的流量最大,还要考虑可行流在网络传送过程中的费用问题,这就是网络的最小费用最大流问题。  最小费用最大流问题的一般提法:已知容量网络 D=(V ,A ,C),每条弧 (Vi,Vj) 除了已给出容量 Cij 外,还给出单位流量的传输费用 bij≥0,记作D=(V, A, C, ..._最小费用最大流问题

Error:(95, 74) 警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用; 对于 varargs 调用, 应使用 Class<?> 对于非 varar-程序员宅基地

警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用;[javac] 对于 varargs 调用,应使用 Java.lang.Object[javac] 对于非 varargs 调用,应使用 java.lang.Object[],这样也可以抑制此警告paths = (String[]) sm.getClass().getMethod("getVo_警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用;

随便推点

Java入门大杀器之JavaSE从入门到精通视频教程_高质量的javase视频教程-程序员宅基地

一周一推的时刻到了,今天要学什么呢?挺不好意思的,最近我迷上了打王者,排位上分的时候感觉特别的刺激,为了稳住那要掉不掉的段位,我都快熬出黑眼圈。在打游戏的过程,我忽然发现,其实还挺像学Java开发的过程的。玩游戏,总在最开始的时候比较笨,因为不懂得怎么去玩、因为缺乏经验,慢慢的在朋友的带领或者自己的摸索下,玩得越来越好。而学Java也是,初入门时候是最难的,特别是那些转行或者零基础入门的人,你要自己摸索去走过那个不懂到有点明白的过程。所以,如果是在这时候入门,有好的学习资源或者有人带,学习难度也会_高质量的javase视频教程

Function与function的区别_function和function-程序员宅基地

Function是一个构造函数,用于创建一个对象function是一个关键字可以声明一个函数对象可以通过以下几个样例来判断: function f(){}; var a = function(){}; var a = new Function();但是不建议通过Function的方式去声明函数对象,因为在给这个对象添加属性(书写其方法)的时候,会再一次的解析代码: var ..._function和function

python mock接口怎么用_python接口自动化测试 - mock模块基本使用介绍-程序员宅基地

mock简介py3已将mock集成到unittest库中为的就是更好的进行单元测试简单理解,模拟接口返回参数通俗易懂,直接修改接口返回参数的值mock作用解决依赖问题,达到解耦作用当我们测试某个目标接口(模块)时,该接口依赖其他接口,当被依赖的接口未开发完成时,可以用mock模拟被依赖接口,完成目标接口的测试模拟复杂业务的接口当我们测试某个目标接口(模块),该接口依赖一个非常复杂的接口时,可以用m..._mock patch secp

C/C++产生随机数-程序员宅基地

C/C++怎样产生随机数:这里要用到的是rand()函数和srand()函数,C/C++里没有自带的random(int number)函数。(1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为0x7fff。例如:(2) 如果你要随机生成...

搭建简单的EXT-GWT(GXT)的开发环境(四)ext-gwt(gxt)结合google map第三版开发-程序员宅基地

随便写着玩玩.不要太认真哦^^这里说一下googlemap第三版和第二版的区别在于第三版能够在移动设备上运行得更快更好.而且第三版取消了key,无需为不同域名注册不用的key了.为什么要是用第3方的library?如果不用,就需要在gwt项目中自己编写许多js代码来访问谷歌地图.使用后,就可以直接写java代码来访问啦^^.gwt官方的google map api libr..._gxt 入门

vue循环输出html元素,【Vue】vue v-for循环出来的li元素,如何操作其中一个的样式?...-程序员宅基地

点击某个li元素后出现或者消失该元素上一个蒙层,但是不知道怎么动态绑定类名,只绑定到该元素。现在是一点击所有元素都出现蒙层了。目前是这样想的::class=”{show:isShow + index}(这个语法是错的,大概意思是想这样) 想把index绑定到变量上,然后再给他添加上class来显示,但是就像上面写的那样,这个语法实现不了第二是给每个元素添加上 show1/show2/show3 的...