LeanBack:HorizontalGridView和VerticalGridView使用详解

LeanBack是Google官方推出的TV端的功能库,里面包含了很多在TV Android端开发常用的控件,本文重点介绍其对RecyclerView适配TV端做的封装:HorizontalGridView、VerticalGridView。

HorizontalGridView和VerticalGridView都继承自RecyclerView,针对TV的特性,在item排版、焦点流转、上/失焦动画、记住焦点、焦点item对齐位置等方面做了比较好的封装,其继承结果如下

HorizontalGridView和VerticalGridView继承结构
HorizontalGridView和VerticalGridView继承结构

从上图可见,HorizontalGridView和VerticalGridView皆继承自BaseGridView,BaseGridView则继承自RecyclerView,BaseGridView实现了大部分上述的封装,包括列表的滑动、焦点事件的分发等等。其中,BaseGridView持有了GridLayoutManager的引用,实际上,BaseGridView大量的方法都流转到GridLayoutManager,所以上述的功能的实现其实是在GridLayoutManager实现的。

注意这里的GridLayoutManager跟平常使用GridLayoutManager不是同一个,上图中可以看到,它直接继承自RecyclerView.LayoutManager,我们知道,RecyclerView将列表的具体展示模式交由LayoutManager实现和管理,因此只要切换不同的LayoutManager就可以实现不同的列表模式。这里的GridLayoutManager则是针对TV特性,实现了前面所述的功能的一个实现。这里暂时不对具体实现做深入的探讨,着重介绍HorizontalGridView和VerticalGridView的使用方法。

这里只对HorizontalGridView做介绍,VerticalGridView类似。

HorizontalGridView的封装采用了MVP模式,涉及的几个类及其功能如下:

  1. HorizontalGridView:RecyclerView的子类;
  2. GridLayoutManager:适配的LayoutManager,支持横向的多行列表和纵向的多列列表,已包含在BaseGridView里,不需要额外设置,这点要注意;
  3. ObjectAdapter:承担MVP中model的职责,负责提供数据访问接口
  4. Presenter:职责类似RecyclerView的adapter,辅助item视图的创建和数据绑定等
  5. PresenterSelector:根据不同的数据类型选择不同的Presenter,用于多item type列表模型
  6. ItemBridgeAdapter:HorizontalGridView和ObjectAdapter的桥梁,用于解耦双方
  7. FocusHighlightHandler:item上焦的处理接口
  8. FocusHighlightHelper:上焦动画帮助类,内置了两种上焦动画

简单用法如下:

  1. 布局中添加HorizontalGridView
    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值