Android 谷歌地图v2改变语言

Android 谷歌地图v2改变语言,android,google-maps,google-maps-android-api-2,Android,Google Maps,Google Maps Android Api 2,问题是谷歌地图保留了它最初开放时的语言。例如,我有两个活动(活动A和活动B)。活动A由设置页组成,我在其中将语言更改为该活动。请注意,它不是系统语言,而是使用Locale.setDefault()。这成功地翻译了我的应用程序,文本没有问题,除了谷歌地图语言。活动B由我显示地图的MapFragment组成 当我在英语语言上启动MapActivity时,地图显示英语语言。当我返回活动A并更改语言,然后再次打开MapActivity时,map将保留英语语言,就像从后台进程保存其实例一样 我的调查是,谷

问题是谷歌地图保留了它最初开放时的语言。例如,我有两个活动(活动A和活动B)。活动A由设置页组成,我在其中将语言更改为该活动。请注意,它不是系统语言,而是使用
Locale.setDefault()
。这成功地翻译了我的应用程序,文本没有问题,除了谷歌地图语言。活动B由我显示地图的MapFragment组成

当我在英语语言上启动MapActivity时,地图显示英语语言。当我返回活动A并更改语言,然后再次打开MapActivity时,map将保留英语语言,就像从后台进程保存其实例一样

我的调查是,谷歌地图语言基于地图呈现的第一语言,除非应用程序完全关闭,否则它将保留

有人能帮我解决这个问题,根据我的设置页面中设置的语言环境更改谷歌地图的语言基础吗。到目前为止,我尝试的是清除缓存(我的应用程序和谷歌服务),并通过激活
SupportMapFragment
useViewLifeCycleInFragments
并使用片段生命周期来销毁片段

谢谢

更新

仍然无法翻译谷歌地图:

我所尝试的:

  • 关闭google play服务进程->不工作(不可能)

  • 使用2地图片段->不工作,它将加载相同的地图


  • 首先,您必须了解支持的语言,并注意使用的语言代码,如中所述

    为了以编程的方式实现这一点,本文已经给出了解决方案


    请让我们知道它是否也适用于您。:)

    问题在于谷歌地图的磁贴缓存。 你应该做的是使用和

    谷歌在我提供的链接中为您提供了一些示例

    您应该自己获取磁贴并使用imageloader或picaso库,然后在其设置中禁用缓存

    通过这样做,您总是可以使用您提供的本地语言获得新的互动程序

    样本:

    import com.google.android.gms.maps.GoogleMap;
    import com.google.android.gms.maps.OnMapReadyCallback;
    import com.google.android.gms.maps.SupportMapFragment;
    import com.google.android.gms.maps.model.TileOverlay;
    import com.google.android.gms.maps.model.TileOverlayOptions;
    import com.google.android.gms.maps.model.TileProvider;
    import com.google.android.gms.maps.model.UrlTileProvider;
    
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.CheckBox;
    
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.Locale;
    
    /**
     * This demonstrates how to add a tile overlay to a map.
     */
    public class TileOverlayDemoActivity extends AppCompatActivity implements OnMapReadyCallback {
    
    /** This returns moon tiles. */
    private static final String MOON_MAP_URL_FORMAT =
            "http://mw1.google.com/mw-planetary/lunar/lunarmaps_v1/clem_bw/%d/%d/%d.jpg";
    
    private TileOverlay mMoonTiles;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tile_overlay_demo);
    
        SupportMapFragment mapFragment =
                (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }
    
    @Override
    public void onMapReady(GoogleMap map) {
        map.setMapType(GoogleMap.MAP_TYPE_NONE);
    
        TileProvider tileProvider = new UrlTileProvider(256, 256) {
            @Override
            public synchronized URL getTileUrl(int x, int y, int zoom) {
                // The moon tile coordinate system is reversed.  This is not normal.
                int reversedY = (1 << zoom) - y - 1;
                String s = String.format(Locale.US, MOON_MAP_URL_FORMAT, zoom, x, reversedY);
                URL url = null;
                try {
                    url = new URL(s);
                } catch (MalformedURLException e) {
                    throw new AssertionError(e);
                }
                return url;
            }
        };
    
        mMoonTiles = map.addTileOverlay(new TileOverlayOptions().tileProvider(tileProvider));
    }
    
    public void setFadeIn(View v) {
        if (mMoonTiles == null) {
            return;
        }
        mMoonTiles.setFadeIn(((CheckBox) v).isChecked());
    }
    }
    
    import com.google.android.gms.maps.GoogleMap;
    导入com.google.android.gms.maps.OnMapReadyCallback;
    导入com.google.android.gms.maps.SupportMapFragment;
    导入com.google.android.gms.maps.model.TileOverlay;
    导入com.google.android.gms.maps.model.tileOverlayouts选项;
    导入com.google.android.gms.maps.model.TileProvider;
    导入com.google.android.gms.maps.model.UrlTileProvider;
    导入android.os.Bundle;
    导入android.support.v7.app.AppActivity;
    导入android.view.view;
    导入android.widget.CheckBox;
    导入java.net.MalformedURLException;
    导入java.net.URL;
    导入java.util.Locale;
    /**
    *这演示了如何将平铺覆盖添加到地图。
    */
    公共类TileOverlayDemoActivity扩展了AppCompatActivity在MapreadyCallback上的实现{
    /**这将返回月亮瓷砖*/
    私有静态最终字符串MOON\u MAP\u URL\u格式=
    "http://mw1.google.com/mw-planetary/lunar/lunarmaps_v1/clem_bw/%d/%d/%d.jpg";
    私人地铺覆盖物;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tile\u overlay\u demo);
    SupportMapFragment映射片段=
    (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
    getMapAsync(这个);
    }
    @凌驾
    已于4月1日公开作废(谷歌地图){
    map.setMapType(GoogleMap.map\u TYPE\u NONE);
    TileProvider TileProvider=新的URL TileProvider(256256){
    @凌驾
    公共同步URL getTileUrl(int x、int y、int zoom){
    //月亮瓷砖的坐标系是反向的,这是不正常的。
    
    int reversedY=(1如果在开发人员选项中激活“不保留活动”,行为是否会更改?是否也使用getBaseContext().getResources()进行更改.updateConfiguration?如果在进入活动B之前更改语言会发生什么情况?@pablobu在我的localehelper@SecretCoder你有没有找到一个解决方案?我也有类似的问题。我不想像下面描述的那样覆盖瓷砖。@到目前为止,好莱坞没有解决方案,只是幸运的是,客户认为是:DIM已经意识到了这一点。也就是说,这是正确的,它只更改了一次区域设置。当你返回并更改区域设置并再次打开地图活动时,语言仍然是正确的,因为地图实例没有重置,但平铺覆盖只是图像,而不是一个可以正确放置多边形的地图?不,兄弟!它可以在世界各地工作。你应该做什么d Do正在查找url并将其替换为url。如此“”@secretcoderb但db仅返回lat和long,我无法使用web api