Android 电视:VerticalGridFragment 阴影尺寸和颜色

Android TV: VerticalGridFragment shadow dimension and color

我正在开发 Android 电视应用程序,但我对 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 电视播放器,但它从 21 开始运行没问题。

实际上我之前就此询问过 Leanback 团队,他们说自定义组件的推荐方法是覆盖样式和维度。所以这可能有助于减轻您的一些担忧。

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

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

ListRowPresenter applies a default shadow to each child view. Call setShadowEnabled(boolean) to disable shadows. A subclass may override and return false in isUsingDefaultShadow() and replace with its own shadow implementation.

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

您还可以覆盖 ListRowPresenter 中的 ShadowOverlayHelper.Options createShadowOverlayOptions(),这样您就可以更改角半径以及聚焦和未聚焦的 z 值。