是否可以在Android的运行时更新string.xml文件? [英] Is it possible to update string.xml file at run time in android?

查看:303
本文介绍了是否可以在Android的运行时更新string.xml文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在我的应用程序中动态应用本地化,因此可以在java文件中定义字符串,然后将该字符串提取到我们的布局xml文件中,例如,当我们执行@ string/anystringname替换为Java文件中定义的字符串时,布局文件@somestring定义到Java文件????

I wanted to apply localization in my app dynamically so is it possible to define strings in java file and fetch that strings to our layout xml file i.e as we do @string/anystringname replacing this by the strings defined in java file to our layout file @somestring defined to java file ????

推荐答案

基本上没有.

您不能动态地操纵资源文件. 您需要自己实现此类功能.

You cannot manipulate resource file dynamically. You need to implement such functionality on your own.

这里是一个例子:

english.json

english.json

{
    "hello": "Hello"
}

french.json

french.json

{
    "hello": "Bonjour"
}

public class StringManager {
    private static StringManager sInstance = null;
    private static String sDefaultLanguageCode = "en";

    private Map<String, JSONObject> mLanguageMap = new ArrayMap<>();

    private StringManager() {
    }

    public static StringManager getInstance() {
        if (sInstance == null) {
            synchronized (StringManager.class) {
                if (sInstance == null)
                    sInstance = new StringManager();
            }
        }
        return sInstance;
    }

    public static void setDefaultLanguageCode(String languageCode) {
        sDefaultLanguageCode = languageCode;
    }

    public void addLanguage(String languageCode, JSONObject json) {
        mLanguageMap.put(languageCode, json);
    }

    public String getString(String key) {
        return mLanguageMap.get(mDefaultLanguageCode).getString(key);
    }

    public String getString(String languageCode, String key) {
        return mLanguageMap.get(languageCode).getString(key);
    }
}

public class SomeActivity extends Activity {
    ...
    public void initStringResources() {
        // assume englishJsonObject is created from english.json
        StringManager.getInstance().addLanguage("en", englishJsonObject);
        StringManager.getInstance().addLanguage("fr", frenchJsonObject);

        StringManager.setDefaultLanguageCode("fr");
    }

    public void useSomeString() {
        String helloString = StringManager.getInstance().getString("hello");
        // helloString will be "Bonjour"

        // and you can get specific language string
        String englishHelloString = StringManager.getInstance().getString("en", "hello");
    }

    // this may be called from Button or other UI component
    public void onLanguageChanged(String languageCode) {
        StringManager.setDefaultLanguageCode(languageCode);
        // and update UI components that display localized strings
    }
}

这篇关于是否可以在Android的运行时更新string.xml文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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