为了账号安全,请及时绑定邮箱和手机立即绑定

使用区域设置语言的 Android 应用程序无法在组件上正确显示文本

使用区域设置语言的 Android 应用程序无法在组件上正确显示文本

MYYA 2021-09-12 10:49:32
我在尝试将 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>
查看完整描述

2 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

更改区域设置后,使用此代码重新启动您的应用程序。


    Intent intent = getBaseContext().getPackageManager()

            .getLaunchIntentForPackage( getBaseContext().getPackageName() );

    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    startActivity(intent);

但是在您的情况下,您打开了一个新活动。检查chinese版本是否button_maintenance_service存在。


查看完整回答
反对 回复 2021-09-12
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

下面的代码是我在应用程序中更改语言环境所做的工作。


我认为config.setLocale(...)并且Locale.setDefault(...)应该检查。


Configuration config = res.getConfiguration();


if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {

    config.setLocale(locale);

} else {

    config.locale = locale;

}


res.updateConfiguration(conf, dm);


if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

        if (config.getLocales().size() > 0) {

            Locale.setDefault(config.getLocales().get(0));

        } else {

            Locale.setDefault(config.locale);

        }

    } else {

        Locale.setDefault(config.locale);

}


查看完整回答
反对 回复 2021-09-12
  • 2 回答
  • 0 关注
  • 137 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信