如何在资源中定义组合字符串?

时间:2017-11-20 10:38:44

标签: java android

我在XML文件中定义了以下字符串

<string name="Url_Google">https://google.com</string>

要动态获取Url_Google的值,我可以使用

Toast.makeText(this, getResources().getString(R.string.Url_Google), Toast.LENGTH_SHORT).show();

现在,我在 ActivitySample.java 文件中有两个字符串

String One = "Url";
String Two = "Google";

String Three = One + "_" + Two;

String Three 的值为 Url_Google

如何使用 String Three

在XML文件中获取Url_Google的String值 编辑:道歉。最后的陈述不清楚。我不想编辑XML文件中定义的String值。我只是想使用字符串“Url_Google”从XML文件中获取Url_Google的值

由于

6 个答案:

答案 0 :(得分:2)

根据官方Android文档,您可以使用以下方法: getIdentifier

  

<强>则getIdentifier

     

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

     

返回给定资源名称的资源标识符。完全   限定资源名称的格式为&#34; package:type / entry&#34;。首先   如果defType和,则两个组件(包和类型)是可选的   defPackage分别在这里指定。

     

注意:不鼓励使用此功能。效率更高   按标识符而不是按名称检索资源。

     

参数name String:所需资源的名称。

     

defType String:可选的默认资源类型,如果&#34;输入/&#34;是   不包括在名称中。可以为null以要求显式类型。

     

defPackage字符串:可选的默认包,如果&#34;包:&#34;是   不包括在名称中。可以为null以要求显式包。

     

返回int int关联的资源标识符。如果不是,则返回0   找到了这样的资源。 (0不是有效的资源ID。)

因此,使用getIdentifier()查找id的资源Url_Google,然后将此id传递给getResources().getString(id)

int id = getResources().getIdentifier("Url_Google", "string", YourActivity.this.getPackageName())

答案 1 :(得分:2)

请试试这个..可以解决你的问题

 public static String byValueName(Context context, String name) {
    Resources res = context.getResources();
    return res.getString(res.getIdentifier(name, "string", context.getPackageName()));
}

答案 2 :(得分:1)

你可以这样做:

<string name="one">Url</string>
<string name="two">Google</string>
<string name="Url_Google">%1$s_%2$s</string>

然后

Toast.makeText(this,
           String.format(getResources().getString(R.string.Url_Google),
                         getResources().getString(R.string.one), 
                         getResources().getString(R.string.two)), 
           Toast.LENGTH_SHORT).show();

答案 3 :(得分:1)

您无法在运行时更改/添加资源。确切地说,您无法在运行时修改pod install文件夹中的任何内容,因此您可以像现在一样将其添加到res,或者无法通过编程定义的String将其添加到strings.xml你提出了

答案 4 :(得分:1)

您无法以编程方式修改资源数据。编译应用程序时,aapt将生成R类,其中包含res /目录中所有资源的资源ID。对于每种类型的资源,都有一个R子类(例如,所有可绘制资源的R.drawable),对于该类型的每个资源,都有一个静态整数(例如,R.drawable.icon)。此整数是可用于检索资源的资源ID。

因此,您无法以编程方式更新资源。

替代,

您可以使用Sharedprefrence替代。

答案 5 :(得分:0)

试试这个

    String One = "Url";
    String Two = "Google";

    String Three = One + "_" + Two;

    int String_id = getResources().getIdentifier(Three, "string", BrowserMainActivity.this.getPackageName());

    Toast.makeText(getApplicationContext(), String_id, 0).show();