电视

  
为开发者提供 Compose 和 Material Design 功能,以便为电视编写应用
最新更新 稳定版 发布候选版 Beta 版 Alpha 版
2025 年 1 月 15 日 1.0.0 - - 1.1.0-alpha01

声明依赖项

要添加对 tv-foundation 和 tv-material 的依赖项,您必须将 Google Maven 仓库添加到您的项目中。如需了解更多信息,请阅读Google 的 Maven 仓库

在您的应用或模块的 build.gradle 文件中添加您所需工件的依赖项

Groovy

dependencies {
    implementation "androidx.tv:tv-foundation:1.0.0-alpha12"
    implementation "androidx.tv:tv-material:1.1.0-alpha01"
}

Kotlin

dependencies {
    implementation("androidx.tv:tv-foundation:1.0.0-alpha12")
    implementation("androidx.tv:tv-material:1.1.0-alpha01")
}

有关依赖项的更多信息,请参阅添加构建依赖项

反馈

您的反馈有助于改进 Jetpack。如果您发现新问题或对改进此库有任何想法,请告诉我们。在创建新问题之前,请查看此库中的现有问题。您可以通过点击星形按钮为您已有的问题投票。

创建新问题

有关更多信息,请参阅问题跟踪器文档

此工件没有发布说明。

Tv-Material 版本 1.1

版本 1.1.0-alpha01

2025 年 1 月 15 日

androidx.tv:tv-material:1.1.0-alpha01 已发布。版本 1.1.0-alpha01 包含这些提交

API 变更

  • FocusEnterExitScope.cancelFocus() 更改为 cancelFocusChange() (I89959)
  • FocusProperties.enterFocusProperties.exit 分别已被 onEnteronExit 替换,它们使用接收器范围而不是 FocusDirection 参数。 (I6e667)

Bug 修复

  • CompositingStrategy.OffScreen 从 Surface 移到 Text 以修复缩放时文本抖动的问题。 (I92b15f17)
  • 修复了 Carousel 中损坏的焦点管理 (Ie508b721375)
  • Surface(非交互式)与交互式 Surface 相比,实现更简单。 (I7ea545150)

Tv-Material 版本 1.0

版本 1.0.0

2024 年 8 月 21 日

androidx.tv:tv-material:1.0.0 已发布。版本 1.0.0 是 androidx.tv:tv-material 的第一个稳定版本。

版本 1.0.0-rc02

2024 年 8 月 7 日

androidx.tv:tv-material:1.0.0-rc02 已发布。版本 1.0.0-rc02 包含这些提交

Bug 修复

  • 修复了 Surface 可组合项中抖动的文本动画。 (3163319)

版本 1.0.0-rc01

2024 年 7 月 10 日

androidx.tv:tv-material:1.0.0-rc01 已发布。版本 1.0.0-rc01 包含这些提交

版本 1.0.0-beta01

2024 年 5 月 1 日

androidx.tv:tv-material:1.0.0-beta01 已发布。版本 1.0.0-beta01 包含这些提交

API 变更

  • ColorScheme 及其实用函数现已稳定。 (If34fa)
  • LocalContentColor 现已稳定 (I60ee2)
  • Typography API 现已稳定 (I088d6)
  • Shapes API 现已稳定 (I0f5f4)
  • Border API 现已稳定 (I69281)
  • Glow API 现已稳定 (Iea5f1)
  • Icon 组件现已稳定 (I62c2d)
  • LocalTextStyles API 现已稳定 (Iaded8)
  • MaterialTheme API 现已稳定 (I2f541)
  • Text 组件现已稳定 (Ib9e31)
  • RadioButton 组件现已稳定 (Ia03c8)
  • Switch 组件现已稳定 (I6cea3)
  • Checkbox 组件现已稳定 (I7eafc)
  • Surface 组件现已稳定 (I58758, I04aca)
  • NonInteractiveSurfaceDefaults 重命名为 SurfaceDefaults,将 NonInteractiveSurfaceColors 重命名为 SurfaceColors (I0812e)
  • Selectable Surface 现在使用“select”术语而不是“check”,因为它们具有不同的语义含义 (I5a206)
  • NavigationDrawerNavigationDrawerScope 现已稳定 (I249c1)
  • NavigationDrawerItem 组件现已稳定 (Id6986)
  • Tab 和 TabRow 组件现已稳定 (I92d92)
  • ButtonOutlinedButtonIconButtonOutlinedIconButtonWideButton 组件现已稳定 (Ib4de8)
  • CardClassicCardCompactCardWideClassicCardStandardCardContainerWideCardContainer 组件现已稳定 (I34390)
  • StandardCardLayout 重命名为 StandardCardContainer,将 WideCardLayout 重命名为 WideCardContainer (I08883)
  • 移除了 CardContainerDefaults.ImageCard,并将 CardDefaults.ContainerGradient 重命名为 CardDefaults.ScrimBrush (I6adfe)。您可以在卡片容器中使用 Card 代替 CardContainerDefaults.ImageCard
  • ListItemDenseListItem 现已稳定 (Idebd9)
  • ListItemDefaults.ListItemShapeListItemDefaults.FocusedDisabledBorderListItemDefaults.SelectedContainerColorOpacity 现已设为私有 (I5d533)
  • 重新排列了 ListItem 的参数,并将 ListItemDefaults.ListItemElevation 重命名为 ListItemDefaults.TonalElevation (Id6841)。headlineContent 参数已移至可组合项的顶部。之前,您可以使用 Kotlin 的尾随 lambda 语法传递 headlineContent。现在,您需要使用命名参数语法提供 headlineContent
  • LocalAbsoluteTonalElevation 现为内部使用 (Ibfc65)
  • ImmersiveList 组件已被移除。请查看此示例以了解如何自行构建。 (Id48da)
  • 在 API 中公开 MutableInteractionSource 的 tv-material 组件已更新为现在公开可为空的 MutableInteractionSource,其默认值为 null。这里没有语义上的变化:传递 null 意味着您不想提升 MutableInteractionSource,如果需要,它将在组件内部创建。更改为 null 允许某些组件永远不分配 MutableInteractionSource,并允许其他组件仅在需要时才懒惰地创建实例,这提高了这些组件的性能。如果您不使用传递给这些组件的 MutableInteractionSource,建议您改为传递 null。还建议您在自己的组件中进行类似的更改。 (I309b4, b/298048146)
  • TV Text 组件的 TextAlign 参数现在是非 null (Ib73b1, b/299490814)
  • 引入了 ParagraphTextStyleTextAlignTextDirectionHyphensLineBreak 字段的特殊 Unspecified 值以替换 (I4197e, b/299490814)

行为变更

  • 非交互式 Surfaceshape 参数的默认值已更改为 RectangleShape (I1b859cb)
  • 由于必要的 API 仍处于实验阶段,Carousel 的某些功能已在 Beta 版发布中删除 (I0e755d4)
  • 更改 Surface 中的 contentColor 不再在状态之间进行动画处理 (I436e794f)

版本 1.0.0

版本 1.0.0-alpha12

2025 年 1 月 15 日

androidx.tv:tv-foundation:1.0.0-alpha12 已发布。版本 1.0.0-alpha12 包含这些提交

API 变更

  • 清理 tv-foundation 中的 lazy layouts。请参阅 1.0.0-alpha11 发布说明,以从 tv-foundation lazy layouts 迁移。 (I2fdd3, b/358913893)

版本 1.0.0-alpha11

2024 年 7 月 10 日

androidx.tv:tv-foundation:1.0.0-alpha11 已发布。版本 1.0.0-alpha11 包含这些提交

API 变更

  • Tv Lazy Layouts 已从 tv-foundation 库中弃用。请参阅此票证以了解如何从 tv lazy layouts 迁移。 (I0855f, b/332674072)
  • PlatformImeOptions 现在是一个具体类,而不是接口。 (If40a4)

版本 1.0.0-alpha10

2023 年 10 月 4 日

androidx.tv:tv-foundation:1.0.0-alpha10androidx.tv:tv-material:1.0.0-alpha10 已发布。版本 1.0.0-alpha10 包含这些提交。

新功能

  • 引入了 NavigationDrawerItem,用于 NavigationDrawerModalNavigationDrawer。 (I4b491)
  • 向 tv-foundation 库添加基准配置文件。 (2b57fd7)
  • 向 tv-material 库添加基准配置文件。 (1711ff5)

API 变更

  • NavigationDrawerScope.doesTabRowHaveFocus 重命名为 NavigationDrawerScope.hasFocus。 (I8286b)
  • TabRowScope.isActivated 重命名为 TabRowScope.hasFocus。 (Ic4273)

Bug 修复

  • 修复 Carousel 与使用焦点恢复器 API 的相邻项的兼容性。 (7b2a7a4)
  • 禁用 API_LEVEL 低于 28 的发光指示,因为它不受操作系统支持。 (6d3616f)
  • 修复快速反向滚动时,lazy 容器中项目放置不当导致的 ANR 崩溃。 (642d65c)
  • 移除了 Modal Navigation Drawer 中的背景填充。 (69965b2)
  • 修复 Navigation Drawer 中的背景层,使其绘制在背景内容之上而不是后面。 (d4bbefb)

版本 1.0.0-alpha09

2023 年 9 月 6 日

androidx.tv:tv-foundation:1.0.0-alpha09androidx.tv:tv-material:1.0.0-alpha09 已发布。版本 1.0.0-alpha09 包含这些提交。

API 变更

  • 添加 ReusableComposition 接口用于管理子组合的生命周期和重用。 (I812d1, b/252846775)
  • 将 tv-foundation fork 与 compose-foundation 同步。 (I737c3, b/287011882)
  • 添加了 LazyLayout 的重载,它接受 LazyLayoutItemProvider 的 lambda,而不是像以前那样的普通对象。之前的重载已弃用。 (I42a5a)
  • 添加 TvKeyboardAlignment 以允许开发者通过 AndroidImeOptions 配置屏幕键盘位置。 (Idb772)
  • 添加 rememberCarouselState 以使用 Saver 记住 TV Compose Material 中的 CarouselState。 (Id7275)
  • scrimColor: Color 参数更改为 scrimBrush:Brush 参数,以允许用户向背景层添加渐变。 (I254d4)

版本 1.0.0-alpha08

2023 年 7 月 26 日

androidx.tv:tv-foundation:1.0.0-alpha08androidx.tv:tv-material:1.0.0-alpha08 已发布。版本 1.0.0-alpha08 包含这些提交。

新功能

  • 引入了用于 Compose for TV material 的 Chip 组件。 (I86da4)
  • 向 TV Compose Material 添加 ListItem 组件。 (I3f0b3)
  • 向 TV Compose Material 添加 DenseListItem 组件。 (I536bf)

API 变更

  • 将公共 tv-material API 标记为实验性。 (I632e7)
  • 引入了 TabRowScope 以便在 TabRow 可组合项中与 Tab 可组合项共享状态,并重命名了 TabColors 属性。 (Ief587)

版本 1.0.0-alpha07

2023 年 6 月 7 日

androidx.tv:tv-foundation:1.0.0-alpha07androidx.tv:tv-material:1.0.0-alpha07 已发布。版本 1.0.0-alpha07 包含这些提交。

API 变更

  • 组件的缩放指示现在包含 None 以禁用缩放。 (I50df5)
  • 为 TV Material Surface、Cards 和 Buttons 添加了长按支持。 (Id2b89)
  • CarouselItemCarouselScope 已被移除。前景内容动画可以通过在幻灯片中使用来自 AnimatedContentScopeModifier.animateEnterExit 来实现。 (Ic038e)
  • 将 TV Material Surface 的 colorcontentColor 参数合并为 colors。 (Ie69eb)
  • 在 TV Material 中引入了 RadioButton 可组合项。 (I08690)
  • 在 TV Material 中引入了 Switch 可组合项。 (I45e29)
  • 在 TV Material 中引入了 Checkbox 可组合项。 (I6a45a)
  • 在 TV Material 中引入了非交互式 Surface。 (Ic5f85)
  • 使指示内部化。 (Ibff82)

版本 1.0.0-alpha06

2023 年 4 月 19 日

androidx.tv:tv-foundation:1.0.0-alpha06androidx.tv:tv-material:1.0.0-alpha06 已发布。版本 1.0.0-alpha06 包含这些提交。

新功能

  • 添加了针对电视优化的 Material 3 Card 实现。
    • 基本 Card (I5b701)
    • ClassicCardCompactCardWideClassicCard (I70471)
    • StandardCardLayoutWideCardLayout (I33fae)
  • 添加了针对电视优化的 Material 3 Button 实现。

API 变更

  • Carousel 中的 CarouselSlideslideCount 重命名为 CarouselItemitemCount。 (Ie554c)
  • forwardbackward ContentTransforms 重命名为 StartToEndEndToStart。 (Ie554c)

Bug 修复

  • 当焦点位于 NavigationDrawer 上时,处理返回 DPAD 按钮。 (d654f4)

版本 1.0.0-alpha05

2023 年 3 月 22 日

androidx.tv:tv-foundation:1.0.0-alpha05androidx.tv:tv-material:1.0.0-alpha05 已发布。版本 1.0.0-alpha05 包含这些提交。

API 变更

  • tv-material 中引入了 Side Navigation Drawer 可组合项。要了解如何使用此可组合项,请参阅示例。 (I12c08)
  • 在 TV Material 3 中引入 Icon 可组合项 (I72db9)
  • tv-material 中引入了 Surface 可组合项,带有 Border、Glow 和 Scale 等指示,可用于构建能够清晰突出电视屏幕上焦点元素的组件。 (I4a6d8)、(Iceea1)、(Iee4d4)、(I79edf)、(Icb376)
  • CarouselItem 更新为 CarouselSlide 以匹配 'Carousel' API 中的 slideCount 参数名 (Ic4299)

版本 1.0.0-alpha04

2023 年 2 月 8 日

androidx.tv:tv-foundation:1.0.0-alpha04androidx.tv:tv-material:1.0.0-alpha04 已发布。版本 1.0.0-alpha04 包含这些提交。

新功能

  • 在 lazy 行、列和网格中,如有必要,会覆盖枢轴,以确保整个项目都显示在视图中。 (11d7e40)
  • 添加了不同状态下选项卡颜色的自定义功能。 (21b2925)
  • Carousel 现在接受用于向前和向后手动滚动的自定义动画。 (431494a)

API 变更

  • androidx.tv.material 重命名为 androidx.tv.material3,并展平 androidx.tv.material3 下的包结构。 (I6ca52)
  • Carousel 指示器行中的指示器现在是一个插槽,可以由开发者自定义。 (268af2a)
  • focusableItem 重命名为 immersiveListItem。用户必须手动添加 focusable()clickable() 修饰符以及 immersiveListItem (5dd5078)(b/263061052)
  • 将 Carousel 组件中的 timeToDisplayMillis 重命名为 autoScrollDurationMillis。 (431494a)
  • CarouselItem 现在仅限在 Carousel 内部使用。 (431494a)
  • Carousel 现在接受 ContentTransforms 作为动画定义,而不是 EnterTransitionExitTransitions。 (431494a)
  • 引入了 PinnableContainer API,通过组合局部变量由 lazy 列表传播,允许固定当前项目。 (Ib8881, b/259274257, b/195049010)
  • TvLazyListLayoutInfoTvLazyGridLayoutInfo 添加了 mainAxisItemSpacing 属性 (I37765)

Bug 修复

  • 更新 tab-row 以确保其正确处理 tab-count 为 0 或 1 的情况。 (I44009), (1c01525), (b/264018028)
  • 修复当 TvLazyColumn 包含空的 TvLazyRow 时,焦点搜索崩溃的问题。 (e11b4fe), (b/260299091)
  • clickable 修饰符现在可与 ImmersiveList 配合使用。 (5dd5078), (b/263061052)
  • 现在处理返回键并用于退出特色 Carousel。 (84c138c)
  • Carousel 在多次快速按键时不会失去焦点。 (799489f)
  • Carousel 在长按时不会失去焦点。 (b2cf37e)
  • 解决了 Carousel 幻灯片计数更改时的崩溃问题。 (b261247)

版本 1.0.0-alpha03

2022 年 12 月 7 日

androidx.tv:tv-foundation:1.0.0-alpha03androidx.tv:tv-material:1.0.0-alpha03 已发布。版本 1.0.0-alpha03 包含这些提交。

新功能

  • TabRow 现已作为实验性 API 提供,允许用户向其应用添加顶部导航栏。通常,电视设备期望在选项卡标题获得焦点时加载选项卡。
  • 开箱即用,提供了电视专用指示器,例如下划线指示器和药丸指示器。示例用法可在tv-samples中找到。

版本 1.0.0-alpha02

2022 年 11 月 9 日

androidx.tv:tv-foundation:1.0.0-alpha02androidx.tv:tv-material:1.0.0-alpha02 已发布。版本 1.0.0-alpha02 包含这些提交。

Bug 修复

  • 通过减少焦点搜索空间,提高了滚动通过 TvLazyRows/TvLazyColumns 集合时的滚动性能。(I723a3)

版本 1.0.0-alpha01

2022 年 10 月 5 日

androidx.tv:tv-foundation:1.0.0-alpha01androidx.tv:tv-material:1.0.0-alpha01 已发布。版本 1.0.0-alpha01 包含这些提交。

新功能

第一个 Alpha 版包含电视用例的早期预览实现组件,包括

  • 添加修饰符 scrollableWithPivot,以允许非 lazy 滚动容器(如 Row、Column、Grid)滚动内容,使焦点项在电视屏幕上的位置保持不变。
  • 添加可组合项 TvLazyRowTvLazyColumnTvLazyHorizontalGridTvLazyVerticalGrid,使滚动容器滚动内容,从而使焦点项在电视屏幕上的位置保持不变。
  • 为 TV 添加了 Featured Carousel 可组合项,允许用户创建自动滚动的横幅 Carousel。
  • 为 TV 添加了 Immersive List 可组合项,允许用户创建 Immersive Row/Column/Grid,其背景会根据焦点列表项进行更改。

已知问题

  • 当滚动容器获得焦点时,第一个元素默认不会获得焦点。
  • 聚焦 TextField 不总是会打开键盘,或者可能会阻止焦点移动到其他字段。
  • 在包含 LazyRowsLazyColumn 中垂直滚动时性能较差。