android 代码拿到自带资源,Android开发之——使用getIdentifier()方法根据资源名来获取资源id...
一 前言本文主要讲述通过getIdentifier()方法根据资源名获取资源id,并根据获取到的资源id进行相应的操作;根据布局名字获取id设置ContentView(要显示布局)根据drawable图片名字获取资源id,设置显示图片根据mipmap图片名字获取资源id,设置显示图片根据R.string.xx名字资源id,设置字符串根据R.dimen.xx名字获取资源id,设置文字大小根据R.co
一 前言
本文主要讲述通过getIdentifier()方法根据资源名获取资源id,并根据获取到的资源id进行相应的操作;
根据布局名字获取id设置ContentView(要显示布局)
根据drawable图片名字获取资源id,设置显示图片
根据mipmap图片名字获取资源id,设置显示图片
根据R.string.xx名字资源id,设置字符串
根据R.dimen.xx名字获取资源id,设置文字大小
根据R.color.xx名字获取资源id,设置文字颜色
根据R.style.xx名字获取资源id,设置文字样式
其他(R.anim.xx,R.array.xx,R.attr.xx等)
二 Demo示例
2.1 代码结构
2.2 代码功能
2.2.1 根据布局名字获取id设置ContentView(要显示布局)1
2val layoutID=resources.getIdentifier("activity_main","layout",packageName)
setContentView(layoutID)
注:
setContentView(layoutID)代替setContentView(R.layout.activity_main)
项目正常启动且正确显示
2.2.2 根据drawable图片名字获取资源id,设置显示图片1
2
3
4
5
6//获取Drawable图片资源的ID
val drawableId=resources.getIdentifier("ic_launcher","drawable",packageName)
val idDrawable=resources.getDrawable(drawableId)
idDrawable.bounds.set(0,0,idDrawable.minimumWidth,idDrawable.minimumHeight)
tvIdentifierDrawable.text=String.format(Locale.CHINA,"Drawable资源ID=%s",drawableId)
tvIdentifierDrawable.setCompoundDrawables(null,null,null,idDrawable)
注:
tvIdentifierDrawable 是TextView的ID
获取的drawableID用于给TextView设置drarableBottom显示图片
2.2.3 根据mipmap图片名字获取资源id,设置显示图片1
2
3
4
5
6//获取mipmap图片资源的ID
val mipmapId=resources.getIdentifier("ic_launcher_round","mipmap",packageName)
val idMipmap=resources.getDrawable(mipmapId)
idMipmap.bounds.set(0,0,idMipmap.minimumWidth,idMipmap.minimumHeight)
tvIdentifierMipMap.text=String.format(Locale.CHINA,"Mipmap资源ID=%s",mipmapId)
tvIdentifierMipMap.setCompoundDrawables(null,null,null,idMipmap)
注:
tvIdentifierMipMap 是TextView的ID
获取的mipmapId用于给TextView设置drarableBottom显示图片
2.2.4 根据R.string.xx名字资源id,设置字符串1
2
3//获取String字符串
val stringID=resources.getIdentifier("app_name","string",packageName)
tvIdentifierString.text=String.format(Locale.CHINA,"String资源ID(%s)=%s",stringID,getString(stringID))
注:
stringID是R.string.app_name通过getIdentifier获取的资源id
通过TextView.setText(R.id.stringID)来显示或者getString(stringID)(kotlin中赋值)
2.2.5 根据R.dimen.xx,R.color.xx,获取资源id,设置文字大小和颜色1
2
3
4
5
6
7
8
9//获取Dimen大小,颜色等
val dimenID=resources.getIdentifier("sp_30","dimen",packageName)
val colorID=resources.getIdentifier("colorAccent","color",packageName)
val size=getString(dimenID)
tvIdentifierDimen.apply {
text=String.format(Locale.CHINA,"Dimen资源ID=%s,Color资ID=%s",dimenID,colorID) textSize=getString(dimenID).substring(0,getString(dimenID).indexOf("sp")).toFloat()
setTextColor(resources.getColor(colorID))
}
注:
dimenID是R.dimen.sp_30通过getIdentifier获取的资源id
colorID是R.color.colorAccent通过getIdentifier获取的资源id
TextView.apply给textView中的文字大小和颜色赋值
2.2.6 根据R.style.xx名字获取资源id,设置文字样式1
2
3
4//获取style
val styleID=resources.getIdentifier("MatchMatch","style",packageName)
println(styleID)
tvIdentifierStyle.setTextAppearance(this,styleID)
注:
style样式
1
2
3
4
5
6
7
match_parent
@dimen/dp_15
bold
20sp
@color/colorPrimary
TextView.setTextAppearance给textView设置样式
三 R文件信息(Kotlin模式下)
3.1 R文件的位置app/build/intermediates/javac/debug/classes/package/R.class
3.2 R文件结构Windows 下按 Alt+7,Mac 下应该是 Command+7
3.3 根据获取到的值跟R文件中的值对比对比通过代码获取的值
查询R文件中对应的值
两者对比是否相同
四 getIdentifier()源码查询1
2
3
4
5
6
7
8
9
10
11int getIdentifier(String name, String defType, String defPackage) {
if (name == null) {
throw new NullPointerException("name is null");
}
try {
return Integer.parseInt(name);
} catch (Exception e) {
// Ignore
}
return mAssets.getResourceIdentifier(name, defType, defPackage);
}
五 其他
参考:
Android获取所有应用的资源id和对应的uri
【我的Android进阶之旅】Android使用getIdentifier()方法根据资源名来获取资源id
更多推荐
所有评论(0)