Android - 区分配置更改
Android - differentiating between configuration changes
我正在尝试制作一个示例应用程序,它仅在语言环境更改时执行操作。我已经实施了 onConfigurationChanged(...) 并希望仅在区域设置更改时将用户重定向到不同的 Activity。监听 Locale 变化的 Activity 也监听方向变化(我在清单中已经完成)。
我的问题是,有什么方法可以区分这两个配置更改吗?
Activity 在清单中声明如下:
<activity android:name=".views.MainActivity"
android:configChanges="layoutDirection|locale|orientation|screenSize"/>
而 onConfigurationChange(..) 方法是这样的:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// should execute only on locale change
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
}
您可以将区域设置保存在 SharedPreferences 中,如果区域设置已更改,则在 onConfigurationChanged 方法中进行比较。
这样使用:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
SharedPreferences prefs = getSharedPreferences(
"yourapp", Context.MODE_PRIVATE);
prefs.getString("locale", "DEFAULT");
//newConfig.locale is deprecated since API lvl 24, you can also use newConfig.getLocales().get(0)
if(!locale.equalsIgnoreCase(newConfig.locale.toLanguageTag()) {
// should execute only on locale change
SharedPreferences settings = getSharedPreferences("yourapp", MODE_PRIVATE);
SharedPreferences.Editor prefEditor = settings.edit();
prefEditor.putString("locale", newConfig.locale.toLanguageTag());
prefEditor.commit();
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
}
}
我正在尝试制作一个示例应用程序,它仅在语言环境更改时执行操作。我已经实施了 onConfigurationChanged(...) 并希望仅在区域设置更改时将用户重定向到不同的 Activity。监听 Locale 变化的 Activity 也监听方向变化(我在清单中已经完成)。
我的问题是,有什么方法可以区分这两个配置更改吗?
Activity 在清单中声明如下:
<activity android:name=".views.MainActivity"
android:configChanges="layoutDirection|locale|orientation|screenSize"/>
而 onConfigurationChange(..) 方法是这样的:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// should execute only on locale change
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
}
您可以将区域设置保存在 SharedPreferences 中,如果区域设置已更改,则在 onConfigurationChanged 方法中进行比较。
这样使用:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
SharedPreferences prefs = getSharedPreferences(
"yourapp", Context.MODE_PRIVATE);
prefs.getString("locale", "DEFAULT");
//newConfig.locale is deprecated since API lvl 24, you can also use newConfig.getLocales().get(0)
if(!locale.equalsIgnoreCase(newConfig.locale.toLanguageTag()) {
// should execute only on locale change
SharedPreferences settings = getSharedPreferences("yourapp", MODE_PRIVATE);
SharedPreferences.Editor prefEditor = settings.edit();
prefEditor.putString("locale", newConfig.locale.toLanguageTag());
prefEditor.commit();
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
}
}