我在尝试将 Android 应用程序设置为根据共享首选项集从不同的 strings.xml 读取时遇到了一些问题。
当用户从语言选择中进行选择时,我正在设置共享首选项:
public void setLocale(String localeName) {
SharedPreferences prefs = getContext().getApplicationContext().getSharedPreferences("LANGUAGE_SHARED_PREFERENCE", MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("selected_language_key", localeName).apply();
Intent refresh = new Intent(this.getContext(), MainActivity_.class);
startActivity(refresh);
dismiss();
}
在我的 MainActivity 中,我通过以下代码获得了共享首选项:
SharedPreferences prefs = getApplicationContext().getSharedPreferences("LANGUAGE_SHARED_PREFERENCE", MODE_PRIVATE);
String language = prefs.getString("selected_language_key", "en");
Locale locale = new Locale(language);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = locale;
res.updateConfiguration(conf, dm);
System.out.println("Test " + getString(R.string.maintenance_and_service));
我打印出测试线,看看上面的功能是否有效。我从英文改为中文,反之亦然,效果很好。但是,当共享首选项设置为阅读中文时,当我从MainActivity移动到下一个片段时,下一个片段中按钮中打印的文本仍然是英文。我的 XML for 下一个片段中的按钮:
<Button
android:id="@+id/buttonMaintenanceService"
android:layout_width="@dimen/button_settings_width"
android:layout_height="@dimen/button_settings_height"
style="@style/Button.settings"
android:text="@string/button_maintenance_service"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/buttonRunHistory"
app:layout_constraintTop_toTopOf="@+id/buttonRunHistory"/>
我如何真正让用户选择首选语言,然后将所选语言的 XML 文件用于整个应用程序?
我的值/strings.xml:
<string name="maintenance_and_service">Maintenance and Service</string>
我的价值观-zh/strings.xml:
<string name="maintenance_and_service">维修</string>
小怪兽爱吃肉
Cats萌萌
相关分类