Android中怎么指导ImageButton使用的是哪个resource id?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中怎么指导ImageButton使用的是哪个resource id?相关的知识,希望对你有一定的参考价值。
我是这样设置的ImageButton的背景ImageButton button;button.setImageResource();有没有什么办法取回背景资源,类似getImageResource的功能。
android中的R.java文件是android自动生成的资源文件,因为java是不能直接访问xml文件的,但是android的布局是在xml文件中写的,所以需要借助R.java文件来获取布局文件中的android组件。在布局文件中使用android:id="@+id/testid"来唯一标识这个组件id是不能重名的。
在java文件中可以通过(ImageView)findViewById(R.id.testid);来获取id,也就是相当于实例化吧。
findViewById是我们获取layout中各种View 对象比如按钮、标签、ListView和ImageView的便利方法。
资源id在Android中是如此重要,因此我们只要获得了资源id,即可获得资源。因为某些情况下,我们不能使用某个常量作为资源id(因为我们想用一个变量代替它),所以只能采用两种方式动态获取资源id
下面是动态获取id的2中方法
1、反射
java的反射是如此强大,以至于我们在走投无路时总是想起它。我们来看一段代码:
try
Field field=R.drawable.class.getField(type);
int i= field.getInt(new R.drawable());
Log.d(tag,i+"");
return i;
catch(Exception e)
Log.e(tag,e.toString());
return R.drawable.unknow;
type是一个变量,他的可能值会是“close”、“edit”、“icon”等。我们通过java的反射类Field 去访问 R.drawable 类下面的某个字段。实际上,我们知道在R.drawable 下的字段就是 res.drawable-xxxx 目录下的图片文件的资源id。因此运行上面的这段代码,其实就是通过一个字符串去获取对应图片文件的资源id。比如,当 type 的值为“icon”时,上面的代码会获得res.drawable-xxxx目录下的 icon.png 图片文件的资源id并返回给我们。我们通过资源 id 来把图片显示在ImageView中就是顺理成章的事了。
2、使用Resources 类的 getIdentifier方法
使用反射毕竟还是麻烦。如果同样的事情用 android.content.res.Resources 类来干,就是两句话而已:
Resources res=getResources();
return res.getIdentifier(type,"drawable",getPackageName());
getResources方法是来自于contenxt(也就是Activity类),它直接可以返回一个Resouces对象。而Resouces的getIdentifier方法可以返回R.java中的任何资源id,当然,你必须指定3个参数:字段名,类名,包名。包名指定了的 全限定名的包名部分,如果R 的全限定名为 android.R 或者 com.company.R,则包名在这里就是“android”或“com.company”。getPackageName其实是this.getPackageName(),它直接返回本类的包名。
类名则是资源所属的类。比如我们知道的,在R.java 类中的几个固定的类:drawable、id、string、layout等,在它们下边又定义了许多资源id。
字段名则是资源id的名字。比如这个资源id定义: public static final int del=0x7f020002;
del就是一个资源id的名字,0x7f020002则是它的16进制值。
参考技术A 你为何要取回这个资源呢。是要复用图片吗,如果是的话 试一试这个吧button.getDrawable();下面这两个方法设置图片内容的方法差不多button.setImageDrawable(drawable)button.setImageResource(resId)或者设置的时候改用button.setBackgroundDrawable(d)button.setBackgroundResource(resid)取回的时候用 button.getBackground() 参考技术B View.getId()可以知道view所用的资源id。 参考技术C 这个直接获取有困难,我觉得你setImageResource的时候,再添一条setTag语句,需要取回资源id的时候调用getTag
以上是关于Android中怎么指导ImageButton使用的是哪个resource id?的主要内容,如果未能解决你的问题,请参考以下文章
Android 在listview里itme中有imagebutton 怎么监听这个button?
材质组件中没有 ImageView/ImageButton (Android)
android中,如果使用imageButton可以在drawable 中设置一个selector,但是imageView设置不起作用,怎么办?