我想为我的用户提供应用内(NOT DEVICE-WIDE)区域设置(语言)更改。这就是为什么我设置以下代码,当用户点击特定语言时触发该代码:
private void setLocale(Locale locale) {
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
到目前为止一直很好,但从现在起我还不知道如何更新/刷新我所有的活动活动(当前活动和后台堆栈中的所有活动)。我是否必须覆盖每项活动的onResume()
?难道有可能概括一下吗?
答案 0 :(得分:2)
我会使用诸如this one之类的Eventbus库。
您还可以创建某种设置,一个OnLocaleChangedListener接口,让所有活动(或其他类)监听更改,如下所示:
public class LocaleSettings {
Locale locale;
List<OnLocaleChangedListener> listeners;
void changeLocale(Locale newLocale){
this.locale = newLocale;
for(OnLocaleChangedListener listener : listeners){
listener.localeChanged(newLocale);
}
}
void addListener(){
}
void removeListener(OnLocaleChangedListener toRemove){
}
interface OnLocaleChangedListener{
void localeChanged(Locale locale);
}
}
答案 1 :(得分:1)
如果它们都扩展Activity
,您可以创建一个在onStart()
中进行区域设置检查的超类。然后,您可以扩展自定义Activity
,只需执行一次区域设置检查。
这样的事情:
public abstract class LocaleActivity extends Activity {
@Override
protected void onStart() {
setLocale(yourLocale);
}
}
然后,让我们说你有一个名为MainActivity
的活动。您可以实现它,如下所示:
public class MainActivity extends LocaleActivity {
//no need to override onStart, because we inherit it, whenever the user starts this activity in any way, the locale will set.
}