【问题标题】:getString() with path joining?getString() 与路径连接?
【发布时间】:2019-03-09 10:09:20
【问题描述】:

使用路径连接方法在android中引用字符串资源(xml)的最佳方法是什么?

场景
我在 xml 中有多个字符串资源:

<string name="testString1">Test 1</string>
<string name="testString2">Test 2</string>
<string name="testString3">Test 3</string>

在我的应用程序中,我希望用户根据他们的选择来选择要返回的字符串资源。但是,将有数百种选择。所以我正在寻找某种:

textView.setText(getString(R.string.testString + selection));

非常欢迎任何建议,
干杯

【问题讨论】:

    标签: android string textview


    【解决方案1】:

    来自getIdentifier Android 文档。

    获取标识符

    public int getIdentifier (String name, 
                    String defType, 
                    String defPackage)
    

    返回给定资源名称的资源标识符。一个完全 限定资源名称的格式为“package:type/entry”。首先 如果 defType 和 defPackage 分别在此处指定。

    解决方案:编写一个方法,根据给定的选择来获取设计的字符串,例如 1、2、3。

    public String getStringBasedOnSelection(int selection) {
        String name = "testString" + selection;
        int resId = getResources().getIdentifier(name, "string", getPackageName());
        return getString(resId);
    }
    

    在代码中使用

    Log.i(TAG, getStringBasedOnSelection(1));
    Log.i(TAG, getStringBasedOnSelection(2));
    Log.i(TAG, getStringBasedOnSelection(3));
    

    【讨论】:

      【解决方案2】:

      把这三个都变成一行

      <string name="testString">Test %d</string>
      

      还有这样的用法

      textView.setText(String.format(getString(R.string.project_id), selection)));
      

      【讨论】:

        【解决方案3】:

        您想通过字符串获取字符串资源标识符,该标识符始终为整数。 假设你在一个 Activity 类中:

        int id = getResources().getIdentifier(selection, "string", getPackageName());
        if (id != -1)
        {
            textView.setText(getString(id));
        }
        

        getResources()Context类中定义的一个方法,它返回一个Resources对象。由于我假设您在 Activity 类中工作,它是 Context 的子类,因此您可以调用 getResources()getString(),而不用前缀 Context 实例。

        Resources 是一个类,它定义了一组现在对您有用的方法,例如getIdentifier。看看official documentation。 小心检查不存在的资源。如果找不到资源,此方法返回 -1!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-13
          • 1970-01-01
          • 1970-01-01
          • 2011-10-12
          • 1970-01-01
          • 2011-01-10
          • 2021-10-05
          • 2016-02-03
          相关资源
          最近更新 更多