如何获取已知资源名称的资源ID?
我想通过名称而不是 int id 来访问 String 或 Drawable 等资源。
我会使用哪种方法呢?
I want to access a resource like a String or a Drawable by its name and not its int id.
Which method would I use for this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
它将类似于:
R.drawable.resourcename
确保您没有导入
Android.R
命名空间,因为它可能会混淆 Eclipse(如果您是这样的话)使用)。如果这不起作用,您始终可以使用上下文的
getResources
方法...其中
this.context
被初始化为Activity
,< code>Service 或任何其他Context
子类。更新:
如果这是您想要的名称,
Resources
类(由getResources()
返回)有一个getResourceName(int)< /code> 方法和
getResourceTypeName(int)
?更新2:
Resources
类有这个方法:返回指定资源名称、类型和类型的整数。包裹。
It will be something like:
R.drawable.resourcename
Make sure you don't have the
Android.R
namespace imported as it can confuse Eclipse (if that's what you're using).If that doesn't work, you can always use a context's
getResources
method ...Where
this.context
is intialised as anActivity
,Service
or any otherContext
subclass.Update:
If it's the name you want, the
Resources
class (returned bygetResources()
) has agetResourceName(int)
method, and agetResourceTypeName(int)
?Update 2:
The
Resources
class has this method:Which returns the integer of the specified resource name, type & package.
• 通过
扩展函数
的Kotlin 版本
要通过名称查找资源ID 在Kotlin 中,在kotlin 文件中添加以下代码片段:
ExtensionFunctions.kt
•
用法
现在,只要有上下文引用,就可以使用
resIdByName
方法访问所有资源 ID:•
Kotlin Version
viaExtension Function
To find a resource id by its name In Kotlin, add below snippet in a kotlin file:
ExtensionFunctions.kt
•
Usage
Now all resource ids are accessible wherever you have a context reference using
resIdByName
method:我建议您使用我的方法来获取资源 ID。它比使用速度慢的 getIdentidier() 方法要高效得多。
这是代码:
I would suggest you using my method to get a resource ID. It's Much more efficient, than using getIdentidier() method, which is slow.
Here's the code:
在 Kotlin 中,以下内容对我来说效果很好:
如果资源位于 mipmap 文件夹中,则可以使用参数“mipmap”而不是“drawable”。
In Kotlin following works fine for me:
If resource is place in mipmap folder, you can use parameter "mipmap" instead of "drawable".
如果您需要在撰写中执行此操作,请按以下方法操作:
//then use drawableId
like
painterResource(id = drawableId)
If you need to do this in compose, here how you can do it:
//then use drawableId
like
painterResource(id = drawableId)
除了@lonkly解决方案之外,
方法:
in addition to @lonkly solution
method:
我发现此类对于处理资源非常有帮助。它有一些定义的方法来处理尺寸、颜色、绘图和字符串,如下所示:
I have found this class very helpful to handle with resources. It has some defined methods to deal with dimens, colors, drawables and strings, like this one:
如果我理解正确的话,这就是你想要的
,其中“this”是一个 Activity,只是为了澄清而编写的。
如果您想要 strings.xml 中的字符串或 UI 元素的标识符,请替换“drawable”。
我警告您,这种获取标识符的方式非常慢,仅在需要的地方使用。
官方文档链接:Resources.getIdentifier(String name, String defType, String defPackage)
If I understood right, this is what you want
Where "this" is an Activity, written just to clarify.
In case you want a String in strings.xml or an identifier of a UI element, substitute "drawable"
I warn you, this way of obtaining identifiers is really slow, use only where needed.
Link to official documentation: Resources.getIdentifier(String name, String defType, String defPackage)