Android TV:VerticalGridFragment阴影尺寸和颜色

我正在开发
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>

但它更像是一个黑客而不是一个合适的解决方案.

这是标准阴影:

《Android TV:VerticalGridFragment阴影尺寸和颜色》

这是我当前黑客得到的结果:

《Android TV:VerticalGridFragment阴影尺寸和颜色》

你可以看到,它更小但我无法改变颜色.

是否有正确的方法为VerticalGridFragment和RowsFragment类设置阴影颜色和尺寸?

我正在使用最新的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的源代码,并查看ShadowHelper和ShadowHelperApi21类,了解它们是如何实现为其列表项添加阴影的.我们实际上只是复制了这两个类,因为它们是包本地的.

您还可以在ListRowPresenter中覆盖ShadowOverlayHelper.Options createShadowOverlayOptions(),它可以让您更改角半径和聚焦和未聚焦z.

点赞