【问题标题】:Android TV: VerticalGridFragment shadow dimension and colorAndroid TV:VerticalGridFragment 阴影尺寸和颜色
【发布时间】: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 得到的结果:

如您所见,它更小,但我无法更改颜色。

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

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

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

我的minSdkVersion 是 17 岁,因为有一个自定义的 Android TV 播放器,但它可以从 21 岁开始工作。

【问题讨论】:

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


    【解决方案1】:

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

    但是,我们还必须自定义视图上的阴影。我们通过创建自己的视图和视图演示者(而不是使用他们的ImageCardView)来做到这一点。这样,我们就可以在演示级别设置自己的阴影。

    如果您查看 ListRowPresenter 的文档,文档会说:

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

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

    您还可以在 ListRowPresenter 中覆盖 ShadowOverlayHelper.Options createShadowOverlayOptions(),这使您能够更改拐角半径以及聚焦和不聚焦 z。

    【讨论】:

    • 感谢您的提示:已接受,因为它为我指出了实现自定义阴影的正确类和逻辑(当然我不能假装在这里得到完整的实现)。
    • 如果我只想在选择任何卡时显示阴影怎么办?
    • 我已经有一段时间没有这样做了,但最后一行应该可以工作:“您还可以在 ListRowPresenter 中覆盖 ShadowOverlayHelper.Options createShadowOverlayOptions(),这使您能够更改角半径和聚焦和不集中的z。”您可以提供一个ShadowOverlayHelper.Options,将dynamicShadowUnfocusedZ 指定为0,然后只显示聚焦的阴影。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 2011-12-19
    相关资源
    最近更新 更多