是否有可能在android中运行时更新string.xml文件?

时间:2016-05-28 07:33:38

标签: android xml localization

我想动态地在我的应用程序中应用本地化,因此可以在java文件中定义字符串并将该字符串提取到我们的布局xml文件,即我们使用@ string / anystringname将此文件中的字符串替换为我们的布局文件@somestring定义为java文件????

3 个答案:

答案 0 :(得分:4)

基本上,没有。

您无法动态操作资源文件。 您需要自己实现此类功能。

以下是一个例子:

english.json

{
    "hello": "Hello"
}

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
    }
}

答案 1 :(得分:0)

这是不可能的。但是,可以在运行时更改应用程序的语言。这允许您在strings.xml之间切换不同的语言。 我使用的库是Android localization library 您的所有活动都必须扩展扩展AppCompatActivity的LocalizationActivity。你只需要打电话    setLanguage(&#34;恩&#34); 要更改您的应用语言,请使用其他strings.xml

this thread中,您可以阅读更多可能的解决方案。

答案 2 :(得分:-2)

<TextView  
android:id="@+id/tv"
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="@string/tv"
/>

<string name="tv">old text</string>//old text

final TextView textView = (TextView) findViewById(R.id.rate);
textView.setText("new text");//new text