我在我的活动中使用谷歌地图。 当我在我的应用程序设置中更改语言例如中文时 在重新打开我的应用程序之前,地图的语言没有改变。
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
setContentView(R.layout.activity_maps);
我搜索了很多关于这个问题我发现它是谷歌地图缓存问题,但没有找到任何解决方案。
答案 0 :(得分:1)
我可以考虑解决这个问题的两个方案:
在onConfigurationChanged方法中调用setContentView
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (language_changed){//pseudo_code
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
setContentView(R.layout.activity_maps);
//now you need to do again all the findViewById call
}
}
在onConfigurationChanged方法中重新启动活动
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (language_changed){//pseudo_code
startActivity(CurrentActivity.this, CurrentActivity.class);
finish();
}
}
我没有对此进行测试,但也许它是尝试解决问题的起点。
不要忘记将android:configChanges="locale"
添加到AndroidManifest.xml
中的活动代码中,让系统知道您希望自己处理区域设置更改。如果需要,请阅读更多here
答案 1 :(得分:0)
您可以将BroadcastReceiver与LOCALE_CHANGED Intent一起使用来检测设置更改,然后更新您的视图(地图视图或总布局)。 https://developer.android.com/reference/android/content/Intent.html#ACTION_LOCALE_CHANGED
public class LocaleReceiver extends BroadcastReceiver {
public LocaleReceiver() {}
@Override
public void onReceive(Context context, Intent intent) {
if(Intent.ACTION_LOCALE_CHANGED.equals(intent.getAction())){
// Call a method to trigger view refreshing here
}
}
}