fas*_*que 5 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>
Run Code Online (Sandbox Code Playgroud)
但这更多的是一种黑客行为,而不是一个正确的解决方案。
这是标准阴影:
这是我通过当前的 hack 得到的结果:
正如你所看到的,它更小,但我无法改变颜色。
是否有正确的方法来设置VerticalGridFragment和RowsFragment类的阴影颜色和尺寸?
我正在使用最新的 Leanback 版本:
compile 'com.android.support:leanback-v17:25.2.0'
Run Code Online (Sandbox Code Playgroud)
由于自定义 Android TV 播放器,我的minSdkVersion年龄是 17 岁,但从 21 岁开始就可以正常工作。
事实上,我之前曾向 Leanback 团队询问过这个问题,他们说定制组件的推荐方法是覆盖样式和尺寸。所以这可能有助于减轻您的一些担忧。
然而,我们还必须自定义视图上的阴影。我们通过创建自己的视图和视图呈现器(而不是使用他们的ImageCardView)来做到这一点。这样我们就可以在演示级别设置我们自己的阴影。
如果您查看ListRowPresenter文档的文档,请说:
ListRowPresenter 将默认阴影应用于每个子视图。调用 setShadowEnabled(boolean) 禁用阴影。子类可以重写 isUsingDefaultShadow() 并返回 false,并用它自己的影子实现替换。
要了解他们如何处理阴影的更多信息,请查看 的源代码,ListRowPresenter并查看ShadowHelper和ShadowHelperApi21类,以了解他们如何实现将阴影添加到列表项。实际上我们只是复制了这两个类,因为它们是包本地的。
您还可以覆盖ShadowOverlayHelper.Options createShadowOverlayOptions()其中ListRowPresenter,从而使您能够更改角半径以及聚焦和未聚焦的 z。