【问题标题】:Use dynamic R strings in Android在 Android 中使用动态 R 字符串
【发布时间】:2013-09-09 21:47:21
【问题描述】:

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

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

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

你能帮帮我吗?

【问题讨论】:

    标签: java android string reflection resources


    【解决方案1】:

    有一种比常规 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();
        } 
    

    希望这会有所帮助。

    问候!

    【讨论】:

      【解决方案2】:

      使用两步过程来查找要加载的 ID。先用Resources.getIdentifier(),例如:

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

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

      String colour = getString(id);
      

      【讨论】:

        【解决方案3】:
        String mystring = getResources().getString(R.string.yellow);
        

        【讨论】:

          猜你喜欢
          • 2023-03-20
          • 2023-02-20
          • 1970-01-01
          • 1970-01-01
          • 2011-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多