我的应用程序支持两种语言,用户可以在运行时更改它。我有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>
答案 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