专栏首页恩蓝脚本android tv列表焦点记忆实现的方法

android tv列表焦点记忆实现的方法

在Android tv中的开发中,经常要跟焦点打交道,一个常见的需求是要有焦点记忆功能,焦点移动到列表中的某一项中,焦点移出去,在回来时焦点还要定位到原来的项目上,对于这种需求,常见的实现方式是列表用用listview或者recyclerview实现,维护一个变量去存储上次的焦点位置,并在焦点变动或者按键事件中去维护这个变量和使用这个变量来定位.

具体实现

比如说用recyclerview实现列表时,在每个itemview的按键事件中,根据按键的方向和当前view的位置,判断是否是向外移走焦点的,如果是,那么就去设置父view也就是recyclerview的焦点模式,并且要保存当前view的位置信息

复制代码 代码如下:

recyclerview.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);

在用户操作移回焦点时,由于前一步设置了焦点模式为block,因此会父view会首先获取焦点,增加焦点变动的事件处理:

recyclerview.setOnFocusChangeListener(new OnFocusChangeListener() {
      @Override
      public void onFocusChange(View v, boolean hasFocus) {
        if(hasFocus){
          Recyclerview recyclerview = (Recyclerview)v;
          recyclerView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
          if(mCurrentFocusPosition 0){
            LayoutManager layoutManager = recyclerView.getLayoutManager();
            View viewByPosition = layoutManager.findViewByPosition(mCurrentFocusPosition);
            if(viewByPosition!=null){
              viewByPosition.requestFocus();
            }
          }
        }
      }
    });

如代码所示,在焦点变动处理中,设置view的焦点模式,可以让子view获取焦点;拿到上一步保存的位置信息来手动设置焦点.

后面介绍另一种更简便的方法,有更好的封装性,不需要外层逻辑做维护处理.

以上就是本文的全部内容,希望对大家的学习有所帮助。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一个吸顶Item的简单实现方法分享

    一般的对于上图样式的Sticker我们使用CoordinatorLayout & AppBarLayout就可以说实现。

    砸漏
  • Android实现知乎选项卡动态隐藏效果实例

    因为最近手上项目也是资讯阅读类,简书,掘金,知乎的效果都想往项目上加,没事就来仿写。

    砸漏
  • Python实现转换图片背景颜色代码

    在使用图片的时候有时候我们希望改变背景颜色,这样就只关注于图片本身。比如在连连看中就只有图片,而没有背景,其实我个人感觉有背景好看一点。

    砸漏
  • 「学习笔记」OpenMV 与 MicroPython

    大一时参加2017年全国大学生电子设计竞赛时,当时第一次接触 Python 和 OpenMV,这是当时写下的学习笔记。后来随着硬盘损坏,这份笔记文档也消...

    悠风
  • 《像计算机科学家一样思考Java》—— 读后总结

    本书属于入门级的Java书籍,与其他的向编程思想、核心技术不同的是,这本书不是按部就班的讲解java变成知识,而是随着语言的深入慢慢增加知识点。 ?   ...

    用户1154259
  • Python实现转换图片背景颜色代码

    在使用图片的时候有时候我们希望改变背景颜色,这样就只关注于图片本身。比如在连连看中就只有图片,而没有背景,其实我个人感觉有背景好看一点。

    砸漏
  • Python 技术篇-3行代码实现Gif动画生成,Gif动画素材获取方法

    我们需要用到 imageio 库,直接pip install imageio就安装了。 原理就是把很多个图片在规定时间内依次展示,就变为我们所见到的动画样式了...

    小蓝枣
  • 关于Guava ForwardingMap

    如上示例,对于使用ForwardingMap的主体,可以不用考虑多代理的Map的具体实现。

    WindWant
  • 必要掌握!Window、WindowManager !

    Window是View的管理者,当我们说创建Window时,一方面指实例化这个管理者,一方面指 用WindowManager.addView()添加view,以...

    胡飞洋
  • 使用云函数 SCF 快速部署验证码识别接口

    验证码识别是搞爬虫实现自动化脚本避不开的一个问题。通常验证码识别程序要么部署在本地,要么部署在服务器端。如果部署在服务器端就需要自己去搭建配置网络环境并编写调...

    腾讯云serverless团队

扫码关注云+社区

领取腾讯云代金券