谷歌地图缓存问题

时间:2017-05-19 07:39:06

标签: android google-maps

我在我的活动中使用谷歌地图。 当我在我的应用程序设置中更改语言例如中文时 在重新打开我的应用程序之前,地图的语言没有改变。

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);

我搜索了很多关于这个问题我发现它是谷歌地图缓存问题,但没有找到任何解决方案。

2 个答案:

答案 0 :(得分:1)

我可以考虑解决这个问题的两个方案:

  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
        }
    }
    
    1. 在onConfigurationChanged方法中重新启动活动

      @Override
      public void onConfigurationChanged(Configuration newConfig) {
          super.onConfigurationChanged(newConfig);
          if (language_changed){//pseudo_code
               startActivity(CurrentActivity.this, CurrentActivity.class);
               finish();
          }
      }
      
    2. 我没有对此进行测试,但也许它是尝试解决问题的起点。

      不要忘记将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
        }
    }
}