Android TV:VerticalGridFragment 阴影尺寸和颜色
Posted
技术标签:
【中文标题】Android TV:VerticalGridFragment 阴影尺寸和颜色【英文标题】:Android TV: VerticalGridFragment shadow dimension and color 【发布时间】:2017-07-26 04:59:21 【问题描述】:我正在开发一个 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>
但这更像是一种技巧,而不是一个适当的解决方案。
这是标准阴影:
这是我使用当前 hack 得到的结果:
如您所见,它更小,但我无法更改颜色。
有没有为VerticalGridFragment
和RowsFragment
类设置阴影颜色和尺寸的正确方法?
我正在使用最新的 Leanback 版本:
compile 'com.android.support:leanback-v17:25.2.0'
我的minSdkVersion
是 17 岁,因为有一个自定义的 Android TV 播放器,但它可以从 21 岁开始工作。
【问题讨论】:
【参考方案1】:实际上,我之前曾向 Leanback 团队询问过这个问题,他们说自定义组件的推荐方法是覆盖样式和尺寸。所以这可能有助于减轻你的一些担忧。
但是,我们还必须自定义视图上的阴影。我们通过创建自己的视图和视图演示者(而不是使用他们的ImageCardView
)来做到这一点。这样,我们就可以在演示级别设置自己的阴影。
如果您查看 ListRowPresenter
的文档,文档会说:
ListRowPresenter 将默认阴影应用到每个子视图。调用 setShadowEnabled(boolean) 来禁用阴影。子类可以在 isUsingDefaultShadow() 中覆盖并返回 false 并替换为自己的影子实现。
要了解他们如何处理阴影的更多信息,请查看ListRowPresenter
的源代码,并查看ShadowHelper
和ShadowHelperApi21
类,了解他们如何实现为列表项添加阴影。我们实际上只是复制了这两个类,因为它们是包本地的。
您还可以在 ListRowPresenter
中覆盖 ShadowOverlayHelper.Options createShadowOverlayOptions()
,这使您能够更改拐角半径以及聚焦和不聚焦 z。
【讨论】:
感谢您的提示:已接受,因为它为我指出了实现自定义阴影的正确类和逻辑(当然我不能假装在这里得到完整的实现)。 如果我只想在选择任何卡时显示阴影怎么办? 我已经有一段时间没有这样做了,但最后一行应该可以工作:“您还可以在 ListRowPresenter 中覆盖 ShadowOverlayHelper.Options createShadowOverlayOptions(),这使您能够更改角半径和聚焦和不集中的z。”您可以提供一个ShadowOverlayHelper.Options
,将dynamicShadowUnfocusedZ
指定为0,然后只显示聚焦的阴影。以上是关于Android TV:VerticalGridFragment 阴影尺寸和颜色的主要内容,如果未能解决你的问题,请参考以下文章
Android TV 应用无法安装在 Android TV 设备上
Smart TV、Android TV 和 Fire TV 的一种语言