Android TV:VerticalGridFragment阴影尺寸和颜色

时间:2017-03-06 10:51:18

标签: android android-layout android-support-library android-tv leanback

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

但它更像是一种黑客而不是一种正确的解决方案。

这是标准阴影:

Standard shadow

这是我当前黑客的结果:

enter image description here

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

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

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

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

由于自定义的Android电视播放器,我的minSdkVersion为17,但从21开始工作一切正常。

1 个答案:

答案 0 :(得分:1)

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

但是,我们还必须自定义视图上的阴影。我们通过创建自己的视图和我们自己的视图演示者(而不是使用他们的ImageCardView)来完成此操作。有了这个,我们就可以在演示级别设置自己的阴影。

如果您查看ListRowPresenter文档的文档说明:

  

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

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

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