Android TV:VerticalGridFragment 阴影尺寸和颜色

Posted

技术标签:

【中文标题】Android TV:VerticalGridFragment 阴影尺寸和颜色【英文标题】:Android TV: VerticalGridFragment shadow dimension and color 【发布时间】:2017-07-26 04:59:21 【问题描述】:

我正在开发一个 android TV 应用程序,但我对 VerticalGridFragment 呈现的标准阴影不太满意,我希望它更小,更暗一点。

我已经搜索了代码,但没有找到任何完整的工作解决方案。 在我的VerticalGridPresenter 子类中,我唯一可以覆盖的方法是createShadowOverlayOptions,但我无法得到我想要的结果。

我想出的唯一解决方法是定义以下维度,以便覆盖支持库中声明的维度:

<dimen name="lb_material_shadow_details_z">3dp</dimen>
<dimen name="lb_material_shadow_focused_z">4dp</dimen>
<dimen name="lb_material_shadow_normal_z">3dp</dimen>

但这更像是一种技巧,而不是一个适当的解决方案。

这是标准阴影:

这是我使用当前 hack 得到的结果:

如您所见,它更小,但我无法更改颜色。

有没有为VerticalGridFragmentRowsFragment 类设置阴影颜色和尺寸的正确方法?

我正在使用最新的 Leanback 版本:

compile 'com.android.support:leanback-v17:25.2.0'

我的minSdkVersion 是 17 岁,因为有一个自定义的 Android TV 播放器,但它可以从 21 岁开始工作。

【问题讨论】:

【参考方案1】:

实际上,我之前曾向 Leanback 团队询问过这个问题,他们说自定义组件的推荐方法是覆盖样式和尺寸。所以这可能有助于减轻你的一些担忧。

但是,我们还必须自定义视图上的阴影。我们通过创建自己的视图和视图演示者(而不是使用他们的ImageCardView)来做到这一点。这样,我们就可以在演示级别设置自己的阴影。

如果您查看 ListRowPresenter 的文档,文档会说:

ListRowPresenter 将默认阴影应用到每个子视图。调用 setShadowEnabled(boolean) 来禁用阴影。子类可以在 isUsingDefaultShadow() 中覆盖并返回 false 并替换为自己的影子实现。

要了解他们如何处理阴影的更多信息,请查看ListRowPresenter 的源代码,并查看ShadowHelperShadowHelperApi21 类,了解他们如何实现为列表项添加阴影。我们实际上只是复制了这两个类,因为它们是包本地的。

您还可以在 ListRowPresenter 中覆盖 ShadowOverlayHelper.Options createShadowOverlayOptions(),这使您能够更改拐角半径以及聚焦和不聚焦 z。

【讨论】:

感谢您的提示:已接受,因为它为我指出了实现自定义阴影的正确类和逻辑(当然我不能假装在这里得到完整的实现)。 如果我只想在选择任何卡时显示阴影怎么办? 我已经有一段时间没有这样做了,但最后一行应该可以工作:“您还可以在 ListRowPresenter 中覆盖 ShadowOverlayHelper.Options createShadowOverlayOptions(),这使您能够更改角半径和聚焦和不集中的z。”您可以提供一个ShadowOverlayHelper.Options,将dynamicShadowUnfocusedZ 指定为0,然后只显示聚焦的阴影。

以上是关于Android TV:VerticalGridFragment 阴影尺寸和颜色的主要内容,如果未能解决你的问题,请参考以下文章

Android TV开发总结TV上屏幕适配总结

Android TV 应用无法安装在 Android TV 设备上

Smart TV、Android TV 和 Fire TV 的一种语言

Android TV:如何使用 Leanbak 自定义 android TV 的左侧导航面板?

Android-TV 应用显示白屏

Android TV开发总结焦点