以编程方式更改R.string的值?

时间:2011-03-29 14:52:11

标签: android string resources

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

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

请参阅下面附带的代码。

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();
                }
            }
        }
    }
}

4 个答案:

答案 0 :(得分:3)

使用android中引入的localization内置机制。你不需要改变任何东西。您只需为每个语言环境指定新的strings.xml。

答案 1 :(得分:2)

如果您想更改应用的当前语言,可以使用标准的内置本地化功能和changing locale programatically来完成。

答案 2 :(得分:1)

您应该在资源中添加区域设置值并复制它们:每种语言一个,这样设备就可以根据设置选择正确的设置:在那里查看http://developer.android.com/resources/tutorials/localization/index.html

答案 3 :(得分:1)

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

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

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

Bruno Oliveira,Google开发人员程序工程师