AndroidTV焦点问题总结

news/2025/2/12 23:36:38/

AndroidTV焦点问题总结

  • 焦点
    • 1.确定当前焦点位置
    • 2.子view焦点跟随父View变化
    • 3.设置下一个获取焦点的View
    • 4.设置父View和子View哪个获取焦点
    • 5.常用的按键值
    • 7.控制RecycleView焦点跳转逻辑
    • 8.其他View焦点跳转到RecyclerView
    • 9.ViewGroup的某个子View获取焦点

焦点

1.确定当前焦点位置

在一些复杂的View中,频繁按遥控器,焦点丢失,可以通过如下方法获取全局焦点所在的View

ViewTreeObserver viewTreeObserver = getWindow().getDecorView().getViewTreeObserver();viewTreeObserver.addOnGlobalFocusChangeListener(new ViewTreeObserver.OnGlobalFocusChangeListener() {@Overridepublic void onGlobalFocusChanged(View oldFocus, View newFocus) {Log.d(TAG, "oldFocus========" + oldFocus  + "newFocus============" + newFocus);}});

2.子view焦点跟随父View变化

父View是一个ViewGroup,有焦点时背景变化,子View是一个TextView有焦点时字体颜色变化

android:duplicateParentState="true" 

3.设置下一个获取焦点的View

android:nextFocusDown="@id/view1"
android:nextFocusUp="@id/view2"
android:nextFocusLeft="@id/view3"
android:nextFocusRight="@id/view4"

4.设置父View和子View哪个获取焦点

使用descendantFocusability属性

  • beforeDescendants :viewGroup会优先其子类控件而获取到焦点
  • afterDescendants :viewGroup只有当其子类控件不需要获取焦点时才获取焦点
  • blocksDescendants :viewGroup会覆盖子类控件而直接获得焦点

5.常用的按键值

KEYCODE_BACK 4返回KEYCODE_DPAD_DOWN 20KEYCODE_DPAD_UP  19KEYCODE_DPAD_LEFT 21KEYCODE_DPAD_RIGHT 22KEYCODE_ENTER = 66;KEYCODE_MEDIA_REWIND  快退KEYCODE_MEDIA_FAST_FORWARD 快进KEYCODE_VOLUME_DOWN = 25;KEYCODE_VOLUME_MUTE = 164;KEYCODE_VOLUME_UP = 24;

7.控制RecycleView焦点跳转逻辑

例 item最后一行未满,倒数第二行DOWN需要跳转下一行

参考文章跳转逻辑逻辑修改

8.其他View焦点跳转到RecyclerView

  1. RecyclerView第一次获得焦点,默认选中第一项
  2. RecyclerView重新获得焦点后,选中上次的item

Android系统的焦点跳转规则是就近跳转,以上两点可能无法满足。使用HorizontalGridView或者VerticalGridView则可以解决以上两点问题。

9.ViewGroup的某个子View获取焦点

handler.postDelayed(() -> {View child = videoPlayerHolder.ctrlInfoList.getChildAt(0);View list = child == null ? null : ((LinearLayout) child).getChildAt(1);View item = list == null ? null : ((HorizontalGridView) list).getChildAt(currentIndex);if (child == null || list == null) {videoPlayerHolder.ctrlInfoList.requestFocus();} else {if (item == null) {list.requestFocus();} else {item.requestFocus();}}}, 50);

http://www.ppmy.cn/news/384692.html

相关文章

Spring的存储与获取Bean

Spring的存储与获取Bean 🔎Spring—存储Bean配置扫描路径利用类注解进行存储添加注解存储Bean关于Id为什么需要五个类注解类注解之间的关系 利用方法注解进行存储关于Id 🔎Spring—获取Bean属性注入Set注入构造方法注入总结(Spring的注入方式? 它们之间…

运维圣经:Webshell应急响应指南

目录 Webshell简介 Webshell检测手段 Webshell应急响应指南 一. Webshell排查 二. 确定入侵时间 三. Web日志分析 四. 漏洞分析 五. 漏洞复现 六. 清除Webshell并修复漏洞 七. Webshell防御方法 Webshell简介 Webshell通常指以JSP、ASP、 PHP等网页脚本文件形式存在…

IM相关技术

messages表 保存的消息记录(Saved Messages) bff,session TON以及tdlib 官方版设置中文 tg://setlanguage?langclassic-zh-cn https://web.telegram.org/k/ https://web.telegram.org/a/ https://github.com/TGX-Android https://github.com/NekoX-Dev/NekoX, 内置公共代理不…

【第9题】容斥原理:P3197 [HNOI2008]越狱

题目:P3197 [HNOI2008]越狱 题目原文请移步下面的链接 https://www.luogu.com.cn/problem/P3197 参考题解:https://www.luogu.com.cn/problem/solution/P3197 标签:OI、 数学、容斥 题解 思路 第一点:排列组合的问题&#xf…

怎么快速给需要的网路标记颜色?

引入 我们在走线的时候,需要知道那些类型的线需要先走,接下来又要走那些类型的线,然后依次走完,如果在团队中,这一类型的线分配给这个人走,哪一类型的线有分配给那个人走。而在不管是那单个人,还…

单片机按键开机检测

POWER通过单片机的IO口控制,按键按下口单片机供电上电,单片机控制POWER引脚置高,维持自身供电。

MIT6.024学习笔记(三)——图论(2)

科学是使人变得勇敢的最好途径。——布鲁诺 文章目录 通信网络问题二叉树型直径路由器规模路由器数量拥挤程度 二维数组型直径路由器规模路由器数量拥挤程度 蝴蝶型直径路由器规模路由器数量拥挤程度 benes型直径路由器规模路由器数量拥挤 通信网络问题 在通信网络中&#xff…

vue可复用性

mixin混入 合并规则 data在内部会进行递归合并,并在发生冲突时以组件数据优先。值为对象的选项,例如 methods、components 和 directives,将被合并为同一个对象。两个对象键名冲突时以组件数据优先。同名生命周期函数将合并为一个数组&…