问题是谷歌地图保留了首次打开时的语言。例如,我有2个活动(活动A和活动B)。活动A由设置页面组成,我将语言更改为该活动。请注意,它不是系统语言,而是使用Locale.setDefault()
。这成功翻译了我的应用程序,除了谷歌地图语言外,文本没有问题。活动B由MapFragment组成,我在其中显示地图。
当我在英语语言上启动MapActivity时,地图会显示英语语言。当我回到活动A并更改语言,然后再次打开MapActivity时,地图会保留英语,就像从后台进程中保存其实例一样。
我的调查是,谷歌地图语言是基于地图呈现的第一种语言,除非应用程序完全关闭,否则它将保留。
有人可以帮我解决此问题,根据我的“设置”页面中设置的区域设置更改Google地图语言库。到目前为止,我尝试清除缓存(我的应用和谷歌服务),并通过激活useViewLifeCycleInFragments
的{{1}}并使用片段生命周期来销毁片段。
感谢。
更新
仍无法翻译Google地图:
我尝试过:
关闭Google Play服务流程 - >不工作(不可能)
使用2地图片段 - >不工作,它将加载相同的地图
答案 0 :(得分:2)
问题是谷歌地图的平铺缓存。 您应该使用Tile Overlays和Tile 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。
如果它也适合你,请告诉我们。 :)