android tv列表焦点记忆实现的方法
2018-04-02 09:45
661 查看
在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获取焦点;拿到上一步保存的位置信息来手动设置焦点.
后面介绍另一种更简便的方法,有更好的封装性,不需要外层逻辑做维护处理.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
相关文章推荐
- Android实现获取应用程序相关信息列表的方法
- AndrowListView实现(自定义游戏列表)防止屏幕闪烁,设置分割线android中不推荐的方法,要考虑向下兼容,用了推荐的新方法,可能不兼容旧版本系统的手机
- Android编程实现在Activity中操作刷新另外一个Activity数据列表的方法
- android开发实现列表控件滚动位置精确保存和恢复的方法(推荐)
- Android初级,实现网易云音乐歌曲列表界面效果,播放界面效果,ListView,ViewPager方法详解
- Android实现获取应用程序相关信息列表的方法
- Android开发之ListView列表刷新和加载更多实现方法
- Android编程实现自定义分享列表ACTION_SEND功能的方法
- Android TV RecyclerView焦点移动飞框的实现
- Android开发实现Launcher3应用列表修改透明背景的方法
- android 图文列表的实现方法
- Android开发实现横向列表GridView横向滚动的方法【附源码下载】
- Android开发-实现pulltorefresh上类似购物车加减方法和EditText焦点问题的解决方法
- Android 使用RecyclerView实现列表item重叠效果(使用addItemDecoration方法)
- android TextView不用获得焦点实现跑马灯效果 两种方法
- Android ListView同一个item显示2列的实现方法(仿2列商品列表)
- android 有阻尼下拉刷新列表的实现方法
- 一种TV(Android系统)通用焦点框的实现
- Android simpleAdapter使用方法--实现消息列表
- Android编程实现列表侧滑删除的方法详解