区域设置更改后的Android(语言),drawables不会更新

时间:2015-08-12 11:10:59

标签: android

我的应用程序支持两种语言,用户可以在运行时更改它。我有Utils类,方法:

public static void changeLocale(Activity context, String lang) {
        Resources res = context.getResources();
        // Change locale settings in the app.
        DisplayMetrics dm = res.getDisplayMetrics();
        android.content.res.Configuration conf = res.getConfiguration();
        conf.locale = new Locale(lang.toLowerCase());
        res.updateConfiguration(conf, dm);
    }

从Activity调用此方法后,我也调用了finish()方法..

if (changed) {
            Utils.changeLocale(this, Settings.getStringProperty(Settings.APP_LANGUAGE, ""));
            setResult(LANG_CHANGED);
        }

        finish();

更改语言后,所有字符串都会成功更改,但我还需要更改一些drawable ...我的活动有方法initContnet():

private void initContent() {
        System.out.println("lang: " + Settings.getLanguage());

        setContentView(R.layout.main_navigation);
        buttons.put(TAB_1, findViewById(R.id.btn1));
        buttons.put(TAB_2, findViewById(R.id.btn2));
        buttons.put(TAB_3, findViewById(R.id.btn3));
        buttons.put(TAB_4, findViewById(R.id.btn4));
        buttons.put(TAB_5, findViewById(R.id.btn5));

        // set click listener
        Collection<View> btns = buttons.values();
        for (View v : btns) {
            v.setOnClickListener(this);
        }
        makeDefaultselection();
    }

并正确检测语言(当我更改语言时,更改的语言为printet)。此外,所有字符串都被转换了...但是drawables保持不变,untiil我关闭应用程序并再次运行它(在drawables也改变之后)。

有手动刷新所有drawable的方法吗?

这里要清楚的是main_navigation.xml文件中的fragmetns:

 <LinearLayout
        android:id="@+id/navigation_bar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:background="@drawable/nav_back"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:weightSum="5" >

        <Button
            android:id="@+id/btn1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/templates_btn_selector"
            android:contentDescription="@string/app_name" />

这里是butn_selector指向我要刷新的drawable:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/templates_selected" android:state_selected="true"/>
    <item android:drawable="@drawable/templates"/>

</selector>

1 个答案:

答案 0 :(得分:1)

可能您使用的是常用的drawable文件,并为每种语言使用单独的字符串文件。http://developer.android.com/training/basics/supporting-devices/languages.html

为不同语言添加单独的图像资源,例如

res-> drawable-en-> templates_selected.png
res-> drawable-ar-> templates_selected.png
res-> drawable-fr-> templates_selected.png