我正在开发一个应用程序,它将处理以后语言更改的偏好,但现在我的问题是我的应用程序将使用手机语言环境(在我的情况下是法语)但我的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>
我做错了什么?
感谢您的帮助!!
答案 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)。