7

我在使用存储在 my 中的字符串时遇到问题strings.xml,我在其中存储了大量字符串。它们对我非常有用,因为我正在使用它们来翻译我的程序。但是,现在我想动态地在这些字符串之间进行选择,但我不知道该怎么做。举个例子会更容易理解。假设我有以下字符串:

<string name="red">Red</string>
<string name="blue">Blue</string>
<string name="green">Green</string>
<string name="yellow">Yellow</string>

现在让我们假设我有一个函数可以向我传递一个带有颜色的字符串,例如"yellow". 现在我对此只有一个解决方案,进行一个非常大的切换(非常非常大,因为我有很多字符串),我认为必须有一个选项可以将我的函数的输出转换为正确的参数。我的意思是,如果我有一个返回 me 的函数"yellow",并且我想使用R.strings.yellow,那么它们之间必须有一个链接。我不知道您是否可以使用任何类型的反射来实现这一点。

你能帮助我吗?

4

3 回答 3

14

有一种比常规 android 方法“getIdentifier”快 10 倍的方法,不仅可以从字符串中获取值,还可以使用反射以非常简单的方式从 R 文件中存在的可绘制资源或任何其他资源中获取值,如下所示:

try {
        //Get the ID
        Field resourceField = R.string.class.getDeclaredField("yourResourceName");
        //Here we are getting the String id in R file...But you can change to R.drawable or any other resource you want...
       int resourceId = resourceField.getInt(resourceField);

       //Here you can use it as usual
       String yourString = context.getString(resourceId);

    } catch (Exception e) {
        e.printStackTrace();
    } 

希望这可以帮助。

问候!

于 2013-09-09T22:06:14.757 回答
13

使用两步过程找到要加载的 id。首先使用Resources.getIdentifier(),例如:

int id = getResources().getIdentifier("yellow", "string", getPackageName());

然后,在检查 id 不为零(表示找不到资源)后,使用 id 像正常一样获取字符串:

String colour = getString(id);
于 2013-09-09T21:56:36.147 回答
3
String mystring = getResources().getString(R.string.yellow);
于 2013-09-09T21:51:05.083 回答