首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android,从字符串中获取资源ID?

Android,从字符串中获取资源ID?
EN

Stack Overflow用户
提问于 2010-12-13 17:55:07
回答 14查看 176.8K关注 0票数 172

我需要将资源ID传递给我的某个类中的方法。它既需要使用引用所指向的id,也需要使用字符串。我应该如何最好地实现这一点?

例如:

代码语言:javascript
复制
R.drawable.icon

我需要获取它的整数ID,但我还需要访问字符串"icon“。

如果我要传递给这个方法的只是"icon“字符串,那就更好了。

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2010-12-13 19:21:41

@EboMike:我不知道

存在。

在我的项目中,我使用了以下代码:

代码语言:javascript
复制
public static int getResId(String resName, Class c) {

    try {
        Field idField = c.getDeclaredField(resName);
        return idField.getInt(idField);
    } catch (Exception e) {
        e.printStackTrace();
        return -1;
    } 
}

它的用法如下所示,用于获取

资源整数值

代码语言:javascript
复制
int resID = getResId("icon", R.drawable.class); // or other resource class

我刚发现一篇博文说

比我使用反射要慢。

看看这个

..。

票数 187
EN

Stack Overflow用户

发布于 2013-09-30 19:48:07

您可以使用此函数获取资源ID。

代码语言:javascript
复制
public static int getResourceId(String pVariableName, String pResourcename, String pPackageName) 
{
    try {
        return getResources().getIdentifier(pVariableName, pResourcename, pPackageName);
    } catch (Exception e) {
        e.printStackTrace();
        return -1;
    } 
}

所以如果你想

可绘制的

像这样调用函数

代码语言:javascript
复制
getResourceId("myIcon", "drawable", getPackageName());

对于字符串,你可以这样调用它

代码语言:javascript
复制
getResourceId("myAppName", "string", getPackageName());

阅读这篇文章

票数 93
EN

Stack Overflow用户

发布于 2013-07-13 03:12:52

这是基于@Macarse的答案。

使用它以更快和代码友好的方式获取资源Id。

代码语言:javascript
复制
public static int getId(String resourceName, Class c) {
    try {
        Field idField = c.getDeclaredField(resourceName);
        return idField.getInt(idField);
    } catch (Exception e) {
        throw new RuntimeException("No resource ID found for: "
                + resourceName + " / " + c, e);
    }
}

示例:

代码语言:javascript
复制
getId("icon", R.drawable.class);
票数 39
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4427608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档