在 Android TV 上使用 Jetpack Compose

Compose for TV 是构建 Android TV 用户界面的现代方法。Compose for TV 为您的电视应用解锁了 Android 的 Jetpack Compose 的所有优势,使构建美观且功能强大的 UI 变得更加容易。

使用 Compose for TV 的一些具体优势包括:

  • 灵活性:Compose 可用于创建任何类型的 UI,从简单的布局到复杂的动画。组件开箱即用,但也可以自定义和设置样式以满足您的应用需求。
  • 简化和加速开发:Compose 与现有代码兼容,使开发者能够更高效地构建代码量更少的应用。
  • 直观:Compose 使用声明性语法,使您可以更改 UI,调试、理解和审查代码。

如果您不熟悉使用 Jetpack Compose 工具包,请查看Compose 学习路径。许多移动 Compose 的开发原则也适用于 TV。有关声明性 UI 框架的一般优势的更多信息,请参阅为什么选择 Compose。要了解更多信息,还可以参阅GitHub 上的 Compose for TV 示例存储库

兼容性

Compose for TV 在 Android 5.0(API 级别 21)或更高版本的 Android 电视上运行。使用 Compose for TV 的 1.0 版本需要 androidx.compose 库的 1.3.0 版本和 Kotlin 1.7.10。

设置

在 Android TV 上使用 Jetpack Compose 类似于在任何其他 Android 项目中使用 Jetpack Compose。主要区别在于 Compose for TV 添加了提供电视优化组件的库,并使创建适合电视的用户界面变得更容易。在某些情况下,这些组件与它们的非电视对应组件具有相同的名称,例如androidx.tv.material3.Buttonandroidx.compose.material3.Button

Jetpack Compose 工具包依赖项

要使用 Compose for TV,请在应用的 build.gradle 文件中包含 Jetpack Compose 工具包依赖项,如下所示

Kotlin

dependencies {
   val composeBom = platform("androidx.compose:compose-bom:2024.10.01")
   implementation(composeBom)

   // General compose dependencies.
   implementation("androidx.activity:activity-compose:1.9.2")

   implementation("androidx.compose.ui:ui-tooling-preview")
   debugImplementation("androidx.compose.ui:ui-tooling")

   // Compose for TV dependencies.
   implementation("androidx.tv:tv-material:1.0.0")
}

Groovy

dependencies {
   def composeBom = platform('androidx.compose:compose-bom:2024.10.01')
   implementation composeBom

   // General compose dependencies.
   implementation 'androidx.activity:activity-compose:1.9.2'

   implementation 'androidx.compose.ui:ui-tooling-preview'
   debugImplementation 'androidx.compose.ui:ui-tooling'

   // Compose for TV dependencies.
   implementation 'androidx.tv:tv-material:1.0.0'
}

有什么不同

电视材质组件专为客厅设计,具有清晰的焦点指示器遥控器友好的输入行为。有关如何使用这些特定组件的详细信息,请查看电视 UI 设计指南

图 1. 电视材质库中的示例组件。

尽可能使用电视版本的 API 以利用这些功能。

虽然从技术上讲可以使用 Compose Material 的移动版本,但它没有针对 Android TV 上独特的交互风格进行优化。此外,将 Compose Material 与 Compose for TV 中的 Compose Material 混合可能会导致意外行为。例如,由于每个库都有自己的 MaterialTheme 对象,因此如果使用这两个版本,颜色、排版或形状可能会不一致。

下表概述了电视和移动版本之间的依赖关系差异

电视依赖项
(androidx.tv.*)
比较 移动依赖项
(androidx.compose.*)
androidx.tv:tv-material 而不是 androidx.compose.material3:material3

其他资源

  • 电视设计指南
    使用 Compose for TV 构建用户界面的专用电视组件概述,以及指向相关开发者资源的链接。

  • 电视材质目录示例
    一个目录应用,演示了如何使用 Compose for TV 实现Material Design 原则。

  • JetStream 示例
    一个媒体流应用,演示了如何在典型的 Material 应用和现实世界架构中使用 TV Compose。

  • Compose for TV 简介
    此 Codelab 演示了如何构建一个视频播放器应用,其中包含目录浏览器屏幕和详细信息屏幕。

进一步阅读

探索这些指南,了解如何为以下内容构建出色的电视优化体验: