Стили карты
Вы можете изменять внешний вид карты и её объектов с помощью стилей. Стили — это правила, которые определяют в каком порядке и в каком виде отображать данные карты.
Подключение стиля к карте
Вы можете подключить стили из Редактора стилей к карте, добавленной в мобильное приложение. В Редакторе стилей вы можете детально настраивать отрисовку любых компонентов карты с помощью более 200 стилевых слоёв: см. список готовых слоёв.
Чтобы подключить стиль из Редактора стилей:
-
Создайте стиль карты и настройте стилевые слои с помощью Редактора стилей: см. инструкцию Создание стилей и настройка стилевых слоёв. Для создания вы можете использовать базовые стили с готовыми слоями.
-
Экспортируйте стиль: см. инструкцию Подключение стиля для Android SDK.
-
Переместите скачанный стиль в проект с мобильным приложением.
-
Подключите стиль с помощью метода File() и укажите объект стиля в качестве параметра
styleFile:- Для версии SDK 14.0.0 и выше
- Для версии SDK 13.x
// Установить стиль в настройках карты
val mapContainer = findViewById<LinearLayout>(R.id.map_container)
val mapViewModel = DefaultMapControllerViewModel(
sdkContext,
MapControllerOptions(
styleFile = File.fromAsset(sdkContext, "custom-styles.2gis")
)
)
// Создать карту с указанными настройками
mapView = MapView(this).also { view ->
view.setMapControllerViewModel(mapViewModel)
}
mapContainer.addView(mapView)// Установить стиль в настройках карты
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") -
Если ранее у вас был подключён другой стиль, выпустите новую версию приложения.
Изменение стиля карты
Чтобы изменить стиль карты, которая уже добавлена в приложение:
-
Экспортируйте обновлённый стиль из Редактора стилей: см. инструкцию Подключение стиля для Android SDK.
-
Загрузите новый стиль с помощью StyleBuilder:
// Загрузить новый стиль карты
val newStyle = StyleBuilder(sdkContext).loadStyle(File.fromAsset(sdkContext, "custom-styles.2gis"))
// Изменить стиль карты после загрузки
newStyle.onResult { map.style = it } -
Выпустите новую версию приложения.
Переключение темы
Стили карты могут содержать несколько тем (например, дневную и ночную), между которыми можно переключаться «на лету» без необходимости загрузки дополнительного стиля.
При создании карты
Вы можете указать тему при создании карты:
- Для версии SDK 14.0.0 и выше
- Для версии SDK 13.x
// Установить тему в настройках карты
val mapContainer = findViewById<LinearLayout>(R.id.map_container)
val mapViewModel = DefaultMapControllerViewModel(
sdkContext,
MapControllerOptions(
mapAppearance = MapAppearance(
Fixed(MapTheme("day", Color(0xFFFF0000.toInt())))
)
)
)
// Создать карту с указанными настройками
mapView = MapView(this).also { view ->
view.setMapControllerViewModel(mapViewModel)
}
mapContainer.addView(mapView)
// Установить тему в настройках карты
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)
После создания карты
Вы можете изменить тему после создания карты:
- Для версии SDK 14.0.0 и выше
- Для версии SDK 13.x
map.appearance = MapAppearance(Fixed(MapTheme.defaultDarkTheme))
mapView.setTheme(MapTheme.defaultDarkTheme)
Управление стилевыми слоями
Вы можете динамически включать и выключать отображение стилевого слоя на карте. Чтобы включить слой (например, слой с парковками):
-
Инициализируйте глобальную переменную:
-
Откройте Редактор стилей.
-
В блоке Мои стили откройте карточку нужного стиля.
-
В разделе Слои выберите слой, который нужно включить.
-
В блоке Данные (JSON) отредактируйте JSON-файл и добавьте нужную глобальную переменную (
global). Например, для слоя с парковками — это переменнаяparkingOn:
Глобальная переменная может использоваться в нескольких слоях, но только внутри одного стиля.
-
-
Экспортируйте и подключите стиль: см. инструкцию Подключение стиля для Android SDK.
-
Установите значение
trueдля атрибута с помощью метода setAttributeValue(). Например, чтобы включить отображение слоя парковок:map.attributes.setAttributeValue("parkingOn", AttributeValue(true)) -
Выпустите новую версию приложения.