На устройствах Wear OS плитки отображаются с помощью двух ключевых компонентов с независимым управлением версиями. Чтобы плитки ваших приложений работали правильно на всех устройствах, важно понимать эту базовую архитектуру.
- Библиотеки, связанные с плитками Jetpack . Эти библиотеки (включая Wear Tiles и Wear ProtoLayout) встроены в ваше приложение, и вы, как разработчик, контролируете их версии. Ваше приложение использует эти библиотеки для создания объекта
TileBuilder.Tile
(структуры данных, представляющей ваш Tile) в ответ на системный вызовonTileRequest()
. - ProtoLayout Renderer: этот системный компонент отвечает за отображение объекта
Tile
на дисплее и обработку взаимодействия с пользователем. Версия средства визуализации не контролируется разработчиком приложения и может различаться на разных устройствах, даже с одинаковым оборудованием.
Внешний вид или поведение плитки может различаться в зависимости от версии библиотеки Jetpack Tiles вашего приложения и версии средства визуализации ProtoLayout на устройстве пользователя. Например, одно устройство может поддерживать вращение или отображение данных о частоте пульса, а другое — нет.
В этом документе объясняется, как обеспечить совместимость вашего приложения с различными версиями библиотеки Tiles и ProtoLayout Renderer, а также как перейти на более высокие версии библиотеки Jetpack.
Учитывайте совместимость
Чтобы создать плитку, которая будет правильно работать на различных устройствах, вам следует учитывать следующее.
Определить версию рендерера
- Используйте метод
getRendererSchemaVersion()
объектаDeviceParameters
, переданного в ваш метод onTileRequest() . Этот метод возвращает основной и дополнительный номера версий средства визуализации ProtoLayout на устройстве. - Затем вы можете использовать условную логику в реализации
onTileRequest()
чтобы адаптировать дизайн или поведение вашего Tile на основе обнаруженной версии средства визуализации.- Например, если определенная анимация не поддерживается, вместо нее можно отобразить статическое изображение.
Аннотация @RequiresSchemaVersion
- Аннотация
@RequiresSchemaVersion
в методах ProtoLayout указывает минимальную версию схемы отрисовки, необходимую для того, чтобы этот метод вел себя как документировано ( пример ).- Хотя вызов метода, требующего более высокой версии средства визуализации, чем доступна на устройстве, не приведет к сбою вашего приложения, это может привести к тому, что контент не будет отображаться или функция будет проигнорирована.
Пример
override fun onTileRequest(
requestParams: TileService.TileRequest
): ListenableFuture<Tile> {
val rendererVersion =
requestParams.deviceConfiguration.rendererSchemaVersion
val tile = Tile.Builder()
if (
rendererVersion.major > 1 ||
(rendererVersion.major == 1 && rendererVersion.minor >= 300)
) {
// Use a feature supported in renderer version 1.300 or later
tile.setTileTimeline(/* ... */ )
} else {
// Provide fallback content for older renderers
tile.setTileTimeline(/* ... */ )
}
return Futures.immediateFuture(tile.build())
}
Тестируйте разные версии рендеринга
Чтобы протестировать плитки на разных версиях средства визуализации, разверните их в разных версиях эмулятора Wear OS. (На физических устройствах обновления ProtoLayout Renderer доставляются из Play Store или системных обновлений. Невозможно принудительно установить определенную версию средства визуализации.)
Функция предварительного просмотра плитки в Android Studio использует средство рендеринга, встроенное в библиотеку Jetpack ProtoLayout, от которой зависит ваш код, поэтому другой подход — зависеть от разных версий библиотеки Jetpack при тестировании плиток.
Обновите библиотеки Jetpack
Обновите библиотеки плиток Jetpack, чтобы воспользоваться преимуществами новейших улучшений, включая изменения пользовательского интерфейса, обеспечивающие беспрепятственную интеграцию плиток с системой.
Переход на Tiles 1.2/ProtoLayout 1.0
Начиная с версии 1.2, большинство API макетов Tiles находятся в пространстве имен androidx.wear.protolayout
. Чтобы использовать новейшие API, выполните следующие шаги миграции в своем коде.
Обновить зависимости
В файле сборки модуля приложения внесите следующие изменения:
классный
// Removeimplementation 'androidx.wear.tiles:tiles-material:version'// Include additional dependencies implementation "androidx.wear.protolayout:protolayout:1.2.1" implementation "androidx.wear.protolayout:protolayout-material:1.2.1" implementation "androidx.wear.protolayout:protolayout-expression:1.2.1" // Update implementation "androidx.wear.tiles:tiles:1.4.1"
Котлин
// Removeimplementation("androidx.wear.tiles:tiles-material:version")// Include additional dependencies implementation("androidx.wear.protolayout:protolayout:1.2.1") implementation("androidx.wear.protolayout:protolayout-material:1.2.1") implementation("androidx.wear.protolayout:protolayout-expression:1.2.1") // Update implementation("androidx.wear.tiles:tiles:1.4.1")
Обновить пространства имен
В файлах кода вашего приложения на основе Kotlin и Java внесите следующие обновления. Альтернативно вы можете выполнить этот скрипт переименования пространства имен .
- Замените весь импорт
androidx.wear.tiles.material.*
наandroidx.wear.protolayout.material.*
. Выполните этот шаг и для библиотекиandroidx.wear.tiles.material.layouts
. Замените большую часть импорта
androidx.wear.tiles.*
наandroidx.wear.protolayout.*
.Импорт для
androidx.wear.tiles.EventBuilders
,androidx.wear.tiles.RequestBuilders
,androidx.wear.tiles.TileBuilders
иandroidx.wear.tiles.TileService
должен остаться прежним.Переименуйте несколько устаревших методов классов TileService и TileBuilder:
-
TileBuilders
:getTimeline()
дляgetTileTimeline()
иsetTimeline()
дляsetTileTimeline()
-
TileService
:onResourcesRequest()
доonTileResourcesRequest()
-
RequestBuilders.TileRequest
:getDeviceParameters()
дляgetDeviceConfiguration()
,setDeviceParameters()
дляsetDeviceConfiguration()
,getState()
дляgetCurrentState()
иsetState()
дляsetCurrentState()
-
{% дословно %}
- Примечание: текст ссылки отображается, когда JavaScript отключен.
- Начало работы с плиткой
- Создайте свою первую плитку в Wear OS
- Введение в Compose для ТВ