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

我在尝试将 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>


MYYA
浏览 140回答 2
2回答

小怪兽爱吃肉

更改区域设置后,使用此代码重新启动您的应用程序。&nbsp; &nbsp; Intent intent = getBaseContext().getPackageManager()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .getLaunchIntentForPackage( getBaseContext().getPackageName() );&nbsp; &nbsp; intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);&nbsp; &nbsp; startActivity(intent);但是在您的情况下,您打开了一个新活动。检查chinese版本是否button_maintenance_service存在。

Cats萌萌

下面的代码是我在应用程序中更改语言环境所做的工作。我认为config.setLocale(...)并且Locale.setDefault(...)应该检查。Configuration config = res.getConfiguration();if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {&nbsp; &nbsp; config.setLocale(locale);} else {&nbsp; &nbsp; config.locale = locale;}res.updateConfiguration(conf, dm);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {&nbsp; &nbsp; &nbsp; &nbsp; if (config.getLocales().size() > 0) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Locale.setDefault(config.getLocales().get(0));&nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Locale.setDefault(config.locale);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; Locale.setDefault(config.locale);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java