Google Maps v2更改语言

时间:2016-05-10 07:59:56

标签: android google-maps google-maps-android-api-2

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

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

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

有人可以帮我解决此问题,根据我的“设置”页面中设置的区域设置更改Google地图语言库。到目前为止,我尝试清除缓存(我的应用和谷歌服务),并通过激活useViewLifeCycleInFragments的{​​{1}}并使用片段生命周期来销毁片段。

感谢。

更新

仍无法翻译Google地图:

我尝试过:

  1. 关闭Google Play服务流程 - >不工作(不可能)

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

2 个答案:

答案 0 :(得分:2)

问题是谷歌地图的平铺缓存。 您应该使用Tile OverlaysTile Provider

Google在我提供的链接中为您提供了一些示例。

你应该自己获取图块并使用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());
}
}

你应该做的是更改Tile Provider中的OnMapReady中的Local

答案 1 :(得分:0)

首先,您必须了解支持的语言,并注意Locale中详述的语言代码。

要以编程方式进行,已经在此SO帖子中提供了解决方案 - How to change language in android google maps v2 programmatically

如果它也适合你,请告诉我们。 :)