MapBox Android版开发 2 本地化

MapBox Android版开发 2 本地化

  • 前言
  • MapBox V9 本地化
    • 示例1
    • 示例2
    • 示例3
    • 运行效果图
  • MapBox V11 本地化
    • 示例
    • 运行效果图

前言

前文介绍了MapBox V9V11 两个版本配置和显示地图。默认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.gradledependencies中添加依赖项。
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()
    }
}

运行效果图

你可能感兴趣的:(MapBox,Android开发,android,MapBox)