android 常用方法

‌1 getIdentifier是安卓开发一个非常有用的方法,它属于Context类,用于根据资源的名称和类型动态获取资源的id,常用于跨模块和获取系统的资源id等。

vbnet 复制代码
/**
 * Return a resource identifier for the given resource name.  A fully
 * qualified resource name is of the form "package:type/entry".  The first
 * two components (package and type) are optional if defType and
 * defPackage, respectively, are specified here.
 * 
 * <p>Note: use of this function is discouraged.  It is much more
 * efficient to retrieve resources by identifier than by name.
 * 
 * @param name The name of the desired resource.
 * @param defType Optional default resource type to find, if "type/" is
 *                not included in the name.  Can be null to require an
 *                explicit type.
 * @param defPackage Optional default package to find, if "package:" is
 *                   not included in the name.  Can be null to require an
 *                   explicit package.
 * 
 * @return int The associated resource identifier.  Returns 0 if no such
 *         resource was found.  (0 is not a valid resource ID.)
 */
@Discouraged(message = "Use of this function is discouraged because resource reflection makes "
                     + "it harder to perform build optimizations and compile-time "
                     + "verification of code. It is much more efficient to retrieve "
                     + "resources by identifier (e.g. `R.foo.bar`) than by name (e.g. "
                     + "`getIdentifier("bar", "foo", null)`).")
public int getIdentifier(String name, String defType, String defPackage) {
    return mResourcesImpl.getIdentifier(name, defType, defPackage);
}

name:资源的名称,即在res目录下的资源文件的名称,例如"id_test" defType:资源的类型,例如drawable,layout,string等。 defPackage 资源所在的包名。 如果找不到对应的资源,此方法会返回0。

ini 复制代码
val resourceId = resources.getIdentifier("id_test", "string", packageName)
if (resourceId !== 0) {
    val textString = resources.getString(resourceId)
    Log.d("zhangqing", "[onCreate] resourceId=$textString")
} else {
    // 资源不存在
    Log.d("zhangqing", "[onCreate] resourceId no found")
}
xml 复制代码
<resources>
    <string name="app_name">KotlinDemoTest</string>
    <string name="id_test">我爱安卓</string>
</resources>

另外

ini 复制代码
val getResourceName = resources.getResourceName(resourceId)
val getResourceEntryName = resources.getResourceEntryName(resourceId)
val getResourcePackageName = resources.getResourcePackageName(resourceId)
val getResourceTypeName = resources.getResourceTypeName(resourceId)

Log.d("zhangqing", "[onCreate] getResourceName=$getResourceName")
Log.d("zhangqing", "[onCreate] getResourceEntryName=$getResourceEntryName")
Log.d("zhangqing", "[onCreate] getResourcePackageName=$getResourcePackageName")
Log.d("zhangqing", "[onCreate] getResourceTypeName=$getResourceTypeName")

有时我们在一个应用程序中访问另一个应用程序的资源或上下文,这时我们需要使用createPackageContext()方法,这个方法允许我们获取其他应用的上下文,并且使用这个上下文访问其资源。

相关推荐
市场部需要一个软件开发岗位22 分钟前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全
JMchen1232 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
crmscs3 小时前
剪映永久解锁版/电脑版永久会员VIP/安卓SVIP手机永久版下载
android·智能手机·电脑
localbob3 小时前
杀戮尖塔 v6 MOD整合版(Slay the Spire)安卓+PC端免安装中文版分享 卡牌肉鸽神作!杀戮尖塔中文版,电脑和手机都能玩!杀戮尖塔.exe 杀戮尖塔.apk
android·杀戮尖塔apk·杀戮尖塔exe·游戏分享
机建狂魔3 小时前
手机秒变电影机:Blackmagic Camera + LUT滤镜包的专业级视频解决方案
android·拍照·摄影·lut滤镜·拍摄·摄像·录像
hudawei9963 小时前
flutter和Android动画的对比
android·flutter·动画
lxysbly5 小时前
md模拟器安卓版带金手指2026
android
儿歌八万首6 小时前
硬核春节:用 Compose 打造“赛博鞭炮”
android·kotlin·compose·春节
消失的旧时光-19438 小时前
从 Kotlin 到 Dart:为什么 sealed 是处理「多种返回结果」的最佳方式?
android·开发语言·flutter·架构·kotlin·sealed
Jinkxs8 小时前
Gradle - 与Groovy/Kotlin DSL对比 构建脚本语言选择指南
android·开发语言·kotlin