Android; PreferenceFragment语言与应用程序不同

时间:2015-02-19 17:25:31

标签: android-layout android-fragments

我正在开发一个应用程序,它将处理以后语言更改的偏好,但现在我的问题是我的应用程序将使用手机语言环境(在我的情况下是法语)但我的R.xml.settings_prefs语言是英语我的所有字符串已翻译< / p>

strings.xml
values-fr/strings.xml
values-en/strings.xml

以下是我的代码

的快照

SettingsActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_settings);
    // Display the fragment as the main content.
     getFragmentManager().beginTransaction()
    .replace(R.id.content_frame, new SettingsFragment())
    .commit();
}

SettingsFragment.java

public class SettingsFragment extends PreferenceFragment {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Load the preferences from an XML resource
    addPreferencesFromResource(R.xml.settings_prefs);

}

activity_settings.xml

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"  />
</RelativeLayout>

我做错了什么?

感谢您的帮助!!

1 个答案:

答案 0 :(得分:0)

你遇到的问题正是你提到的; “我的应用将使用手机语言环境”。由于您没有专门设置另一个Locale,因此它将使用默认值onCreate。要解决此问题,您可以在启动片段之前在SettingsActivity Locale locale = new Locale("en_US"); Locale.setDefault(locale); Configuration config = new Configuration(); config.locale = locale; getResources().updateConfiguration(config, getResources().getDisplayMetrics()); 中添加以下代码:

{{1}}

使用en_US语言环境应该是万无一失的,因为它必须始终可用。 (“语言环境数据不一定适用于此类中预定义为常量的任何语言环境,除了en_US,这是唯一的区域设置,Java保证始终可用”source: Android API)。