我有两项活动:
- >主要活动
- >配置活动
从'MainActivity'我打开'ConfigurationActivity'。对于小型设备,此“ConfigurationActivity”显示在水平屏幕上。
点击“保存按钮”后,我重新打开“MainActivity”。由于'ConfigurationActivity'在水平屏幕中显示,'MainActivity'也显示在水平屏幕中。
如果我将手机翻转到垂直屏幕,我将丢失我的语言环境配置。
这是我设置区域设置的代码:
Locale locale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = locale;
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(this, MainActivity.class);
refresh.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(refresh);
finish();
我试图在Manifest中强制使用'MainActivity',语言环境和方向而没有成功。
<activity
android:name="main.myproject.MainActivity"
android:label="@string/title_activity_mainactivity"
android:windowSoftInputMode="stateHidden"
android:configChanges="locale|orientation" >
</activity>
可以是将区域设置保存到首选项中的解决方案,然后在'MainActivity'中调用该首选项的方法Create()吗?
感谢。
修改(1):
以下代码不起作用。它继续,每当我将屏幕从水平翻转到垂直时,它就会自动更改应用程序语言。我只有两种语言,母语是:葡萄牙语,第二种是英语。
在'ConfigurationActivity'中,我将代码更改为:
public void setLocale(String lang) {
Locale locale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = locale;
res.updateConfiguration(conf, dm);
SharedPreferences sPrefs = getSharedPreferences("localePref", 0);
sPrefs.edit().putString("lang", lang).commit();
Intent refresh = new Intent(this, MainActivity.class);
refresh.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(refresh);
finish();
}
在'MainActivity'中,我创建了一种调用该语言的方法。
private void load_language(){
SharedPreferences sPrefs = getSharedPreferences("localePref", 0);
String lang = sPrefs.getString("lang", "pt_PT");
Locale locale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = locale;
res.updateConfiguration(conf, dm);
}
我'覆盖'函数onCreate()和onConfigurationChanged():
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_MainActivity);
load_language();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.activity_MainActivity);
load_language();
}
我'log.e'来自首选项的值,值是正确的。 我做错了什么?
答案 0 :(得分:1)
方向改变重新构建整个活动。这样,所有变量及其值都会被重新创建。因此,您将其保存在本地首选项中的想法可能是最佳解决方案。
保存:
SharedPreferences sPrefs = getSharedPreferences("myAppsPreferences", 0);
sPrefs.edit().putBoolean("myKeyHere", value).commit();
装载:
SharedPreferences sPrefs = getSharedPreferences("myAppsPreferences", 0);
Boolean bCheck = sPrefs.getBoolean("MyKeyHere", defaultValue);
适用于其他原始数据类型!