关于android:以编程方式更改R.string的值?

Change value of R.string programmatically?

我正在寻找一种动态更改字符串资源的值的方法。 我尝试使用反射,但是它声称"字段的无效值"。

我将字符串用于布局中的值,但需要将它们换成不同的语言。

请参阅下面的附加代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class Lang{
    public static void langInit(){
        java.lang.reflect.Field[] langStringFields = R.string.class.getFields();

        Log.d(Global.TAG,"--> Lang Listing:" + langStringFields.length);
        Log.d(Global.TAG,"--> Pref for language:");

        String prefInLang = Prefs.cPrefsGet.getString("in_lang","en");

        String fieldName = null;
        String fieldValue = null;
        String newFieldName = null;

        String tmpA ="one";

        for (int i=0; i<langStringFields.length; i++){
            java.lang.reflect.Field field = langStringFields[i];

            fieldName = field.getName();

            try {
                fieldValue = Global.gActivity.getString(field.getInt(R.string.class));
            } catch (Exception e) {
                e.printStackTrace();
            }

            if (fieldName.substring(0,2).equals("lo")){
                try {
                    newFieldName = R.string.class.getField(prefInLang +"_" + fieldName.substring(3)).getName();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                Log.d(Global.TAG,"--> Field:" + fieldName +"value:" + fieldValue +"new field:" + newFieldName);
                try {
                    java.lang.reflect.Field field2 = Class.forName(R.string.class.getName()).getDeclaredField(newFieldName);
                    field2.setAccessible(true);
                    field2.set(R.string.class,tmpA.toString());
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


使用android中引入的内置本地化机制。您无需更改任何内容。您只需要为每个语言环境指定新的strings.xml。


如果您想为您的应用更改当前语言,则可以使用标准的内置本地化功能并以编程方式更改区域设置。


我相信使用Android的内置本地化功能要比手工实现更为可取。您可以参考以下指南:

http://developer.android.com/guide/topics/resources/localization.html

除非,当然,除非我们误解了您的用例,但这听起来确实像您正在尝试进行标准本地化:-)

Google开发人员计划工程师Bruno Oliveira


您应该在资源中添加一个语言环境值并复制它们:一种用于每种语言,从而让设备根据其设置选择正确的语言:在此处进行检查http://developer.android.com/resources/tutorials/localization /index.html