MapBox Android版开发 2 本地化
- 前言
- MapBox V9 本地化
- 示例1
- 示例2
- 示例3
- 运行效果图
- MapBox V11 本地化
- 示例
- 运行效果图
前言
前文介绍了MapBox
V9
和 V11
两个版本配置和显示地图。默认MapBox
地图语言为英文,本文重点介绍如何将地图语言设置为中文。
MapBox V9 本地化
示例1
官方Examples
中介绍如何改变地图语言
- 在地图加载成功后,通过
style
对象,改变国家图层语言。代码如下:
SymbolLayer countryLabelTextSymbolLayer = style.getLayerAs("country-label");
if (countryLabelTextSymbolLayer != null)
countryLabelTextSymbolLayer.setProperties(textField("{name_zh-Hans}"));
示例2
- 参考上述示例,修改所有
label
图层的语言,代码如下:
final String chinese = "{name_zh-Hans}";
List<Layer> layers = style.getLayers();
for (Layer layer : layers) {
if (layer instanceof SymbolLayer) {
SymbolLayer symbolLayer = (SymbolLayer) layer;
String id = symbolLayer.getId();
if (id.endsWith("-label")) {
symbolLayer.setProperties(textField(chinese));
}
}
}
示例3
V9
版本提供了本地化插件来改变地图语言
- 文件
app/build.gradle
,dependencies
中添加依赖项。
dependencies {
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0'
}
- 修改语言代码:
LocalizationPlugin localizationPlugin = new LocalizationPlugin(mapView, mapboxMap, style);
localizationPlugin.setMapLanguage(MapLocale.SIMPLIFIED_CHINESE);
运行效果图
MapBox V11 本地化
示例
官方Examples
中介绍如何改变地图语言
-
通过
Style
类的localizeLabels(locale: Locale)
方法改变地图语言。 -
MainActivity完整代码
package com.example.mapdemo
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.mapbox.maps.MapView
import com.mapbox.maps.MapboxMap
import com.mapbox.maps.Style
import com.mapbox.maps.extension.localization.localizeLabels
import java.util.Locale
class MainActivity : AppCompatActivity() {
private lateinit var mapView: MapView
private lateinit var map : MapboxMap
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mapView = findViewById(R.id.mapView)
map = mapView.mapboxMap
map.loadStyle(Style.MAPBOX_STREETS,) {
it.localizeLabels(Locale.CHINESE)
}
}
override fun onStart() {
super.onStart()
mapView?.onStart()
}
override fun onStop() {
super.onStop()
mapView?.onStop()
}
override fun onLowMemory() {
super.onLowMemory()
mapView?.onLowMemory()
}
override fun onDestroy() {
super.onDestroy()
mapView?.onDestroy()
}
}