Стили карты | Mobile SDK | 2GIS Documentation
Android SDK

Стили карты

Вы можете изменять внешний вид карты и её объектов с помощью стилей. Стили — это правила, которые определяют в каком порядке и в каком виде отображать данные карты.

Вы можете подключить стили из Редактора стилей к карте, добавленной в мобильное приложение. В Редакторе стилей вы можете детально настраивать отрисовку любых компонентов карты с помощью более 200 стилевых слоёв: см. список готовых слоёв.

Чтобы подключить стиль из Редактора стилей:

  1. Создайте стиль карты и настройте стилевые слои с помощью Редактора стилей: см. инструкцию Создание стилей и настройка стилевых слоёв. Для создания вы можете использовать базовые стили с готовыми слоями.

  2. Экспортируйте стиль: см. инструкцию Подключение стиля для Android SDK.

  3. Переместите скачанный стиль в проект с мобильным приложением.

  4. Подключите стиль с помощью метода File() и укажите объект стиля в качестве параметра styleFile:

    // Установка стиля в настройках карты
    val mapContainer = findViewById<LinearLayout>(R.id.map_container)
    val mapOptions = MapOptions().apply {
        styleFile = File.fromAsset(sdkContext, "custom-styles.2gis")
    }
    
    // Создание карты с указанными настройками
    mapView = MapView(this, mapOptions)
    mapContainer.addView(mapView)
    

    Вы можете указать File() с помощью различных конструкторов:

    styleFile = File("custom-styles.2gis")
    
    styleFile = File.fromAsset(sdkContext, "custom-styles.2gis")
    
    styleFile = File.fromString("custom-styles.2gis")
    

Чтобы изменить стиль существующей карты, используйте StyleBuilder:

// Загрузка нового стиля карты
val newStyle = StyleBuilder(sdkContext).loadStyle(File.fromAsset(sdkContext, "custom-styles.2gis"))

// Изменение стиля карты после загрузки
newStyle.onResult { map.style = it }

Стили карты могут содержать несколько тем (например, дневную и ночную), между которыми можно переключаться «на лету» без необходимости загрузки дополнительного стиля.

Вы можете указать темы при создании карты с помощью метода setTheme():

// Установка стиля в настройках карты
val mapContainer = findViewById<LinearLayout>(R.id.map_container)
val mapOptions = MapOptions().apply {
    // Переключение между темами
    setTheme(theme = MapTheme("day", Color(255,0,0)))
}

// Создание карты с указанными настройками
mapView = MapView(this, mapOptions)
mapContainer.addView(mapView)

Изменить тему после создания карты вы можете с помощью метода setTheme():

mapView.setTheme(MapTheme.defaultDarkTheme)

Вы можете динамически включать и выключать отображение стилевого слоя на карте. Чтобы включить слой (например, слой с парковками):

  1. Инициализируйте глобальную переменную:

    1. Откройте Редактор стилей.

    2. В блоке Мои стили откройте карточку нужного стиля.

    3. В разделе Слои выберите слой, который нужно включить.

    4. В блоке Данные (JSON) отредактируйте JSON-файл и добавьте нужную глобальную переменную (global). Например, для слоя с парковками — это переменная parkingOn:

      Добавление глобальной переменной

      Глобальная переменная может использоваться в нескольких слоях, но только внутри одного стиля.

  2. Экспортируйте и подключите стиль: см. инструкцию Подключение стиля для Android SDK.

  3. Установите значение true для атрибута с помощью метода setAttributeValue(). Например, чтобы включить отображение слоя парковок:

    map.attributes.setAttributeValue("parkingOn", AttributeValue(true))