我正在开发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>
但它更像是一种黑客而不是一种正确的解决方案。
这是标准阴影:
这是我当前黑客的结果:
我可以看到,它更小但我无法改变颜色。
是否有正确的方法为VerticalGridFragment
和RowsFragment
类设置阴影颜色和尺寸?
我正在使用最新的Leanback版本:
compile 'com.android.support:leanback-v17:25.2.0'
由于自定义的Android电视播放器,我的minSdkVersion
为17,但从21开始工作一切正常。
答案 0 :(得分:1)
我之前实际上已经向Leanback团队询问了这个问题,他们说他们推荐的自定义组件的方法是覆盖样式和尺寸。这可能有助于缓解你的一些担忧。
但是,我们还必须自定义视图上的阴影。我们通过创建自己的视图和我们自己的视图演示者(而不是使用他们的ImageCardView
)来完成此操作。有了这个,我们就可以在演示级别设置自己的阴影。
如果您查看ListRowPresenter
文档的文档说明:
ListRowPresenter将默认阴影应用于每个子视图。调用setShadowEnabled(boolean)来禁用阴影。子类可以覆盖并在isUsingDefaultShadow()中返回false,并替换为自己的影子实现。
要详细了解它们如何处理阴影,请查看ListRowPresenter
的源代码,并查看ShadowHelper
和ShadowHelperApi21
类,了解它们如何实现添加阴影到他们的列表项目。我们实际上只是复制了这两个类,因为它们是包本地的。
您还可以覆盖ShadowOverlayHelper.Options createShadowOverlayOptions()
中的ListRowPresenter
,这样您就可以更改角半径和聚焦和未聚焦的z。