R.string programically的变化值? [英] Change value of R.string programically?

查看:143
本文介绍了R.string programically的变化值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找一种方式来动态改变一个字符串资源的价值。我曾尝试使用反射,但它声称无效的价值领域。

我使用的布局中值字符串,但需要交换出来为不同的语言。

请参阅随附code以下。

 公共类郎{
    公共静态无效langInit(){
        java.lang.reflect.Field中的[] langStringFields = R.string.class.getFields();        Log.d(Global.TAG - >郎上市:+ langStringFields.length);
        Log.d(Global.TAG - >作为语言preF:);        字符串prefInLang = prefs.c prefsGet.getString(in_lang,恩);        字符串字段名= NULL;
        字符串fieldValue方法= NULL;
        字符串newFieldName = NULL;        字符串TMPA =一;        的for(int i = 0; I< langStringFields.length;我++){
            java.lang.reflect.Field中的字段= langStringFields [I]            字段名= field.getName();            尝试{
                fieldValue方法= Global.gActivity.getString(field.getInt(R.string.class));
            }赶上(例外五){
                e.printStackTrace();
            }            如果(fieldName.substring(0,2).equals(LO)){
                尝试{
                    newFieldName = R.string.class.getField(prefInLang +_+ fieldName.substring(3))的getName();
                }赶上(例外五){
                    e.printStackTrace();
                }
                Log.d(Global.TAG - >现场:+字段名+值:+ fieldValue方法+新领域:+ newFieldName);
                尝试{
                    java.lang.reflect.Field中的字段2 =的Class.forName(R.string.class.getName())getDeclaredField(newFieldName)。
                    field2.setAccessible(真);
                    field2.set(R.string.class,tmpA.toString());
                }赶上(例外五){
                    e.printStackTrace();
                }
            }
        }
    }
}


解决方案

如果你想为你应用程式可以使用标准的内置定位功能和的更改语言环境,编程的。

I'm looking for a way to change the value of a string resource dynamically. I have tried to use reflection but it claims 'invalid value for field'.

I use the strings for values within the layout, but need to swap them out for different languages.

Please see the attached code below.

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

解决方案

If you want to change current language for you app you can do it by using standard built-in localization features and changing locale programatically.

这篇关于R.string programically的变化值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆