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

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

最佳答案

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

关于android - 以编程方式更改 R.string 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5474517/

相关文章:

javascript - 从资源中将 javascript 加载到 UIWebView

javascript - 限制网页上字符串的显示长度

java - 将数组中的字符串复制到字符串变量时遇到问题

java - 如何在 Android 中的 TimerTask 中创建对象?

java - 无法使用散列密码登录 Android 应用程序

c - 使用 C 实现哈希表

android - 在布局 xml 文件 android 中找不到资源错误

PHP - Foreach 循环和资源

android - 移动应用程序中的客户端 SSL 证书有多安全?

java - Android onFocusChanged 函数从未被调用