Android开发之——使用getIdentifier()方法根据资源名来获取资源id
一 前言
本文主要讲述通过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 | val layoutID=resources.getIdentifier("activity_main","layout",packageName) |
注:
- setContentView(layoutID)代替setContentView(R.layout.activity_main)
- 项目正常启动且正确显示
2.2.2 根据drawable图片名字获取资源id,设置显示图片
1 | //获取Drawable图片资源的ID |
注:
- tvIdentifierDrawable 是TextView的ID
- 获取的drawableID用于给TextView设置drarableBottom显示图片
2.2.3 根据mipmap图片名字获取资源id,设置显示图片
1 | //获取mipmap图片资源的ID |
注:
- tvIdentifierMipMap 是TextView的ID
- 获取的mipmapId用于给TextView设置drarableBottom显示图片
2.2.4 根据R.string.xx名字资源id,设置字符串
1 | //获取String字符串 |
注:
- 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 | //获取Dimen大小,颜色等 |
注:
- dimenID是R.dimen.sp_30通过getIdentifier获取的资源id
- colorID是R.color.colorAccent通过getIdentifier获取的资源id
- TextView.apply给textView中的文字大小和颜色赋值
2.2.6 根据R.style.xx名字获取资源id,设置文字样式
1 | //获取style |
注:
style样式
1
2
3
4
5
6
7<style name="MatchMatch">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">@dimen/dp_15</item>
<item name="android:textStyle">bold</item>
<item name="android:textSize">20sp</item>
<item name="android:textColor">@color/colorPrimary</item>
</style>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 | int getIdentifier(String name, String defType, String defPackage) { |
五 其他
参考:
- Android获取所有应用的资源id和对应的uri
- 【我的Android进阶之旅】Android使用getIdentifier()方法根据资源名来获取资源id