当 hasTVPreferredFocus 被忽略时,有没有办法强制关注安卓电视上的可选内容?

Posted

技术标签:

【中文标题】当 hasTVPreferredFocus 被忽略时,有没有办法强制关注安卓电视上的可选内容?【英文标题】:Is there a way to force focus on a selectable on android TV when hasTVPreferredFocus is ignored? 【发布时间】:2020-11-19 15:56:50 【问题描述】:

文档表明hasTVPreferredFocus 仅适用于 tvOS,但其他问题/答案表明它也适用于 android。在某些情况下它似乎对我有用(例如,当屏幕最初加载时),但在其他情况下却没有。在这种情况下,我有一个可选元素网格。单击时,将存储该项目的索引,并将该项目的hasTVPreferredFocus 属性设置为true,以便下次呈现。新屏幕被压入堆栈,新屏幕左侧的按钮获得焦点。弹出堆栈时,我希望最初选择的项目重新获得焦点,但该属性被忽略,并且自动选择了一个不同的元素,特别是并且始终如一地选择了先前选择的行中的第一个元素。引擎似乎正在尝试查找与弹出屏幕的最后一个焦点项目(恰好位于屏幕左侧)最接近的项目,并忽略了hasTVPreferredFocus 属性。由于此属性未按预期工作,有没有办法通过手动强制/将焦点设置到正确的元素来实现这一点?

我的一个尝试是监听useFocusEffect 事件,这将暂时禁用网格项目的 onBlur 和 onFocus 事件,这在视觉上使它看起来像我想要的项目仍然被选中,但在内部是第一个项目在行中仍然有焦点,没有视觉指示器。移动光标后,实际选择的视觉指示符按预期出现(相对于行中的第一项,而不是点击的项目),而最初点击的项目留下一个“幻影”选择,直到光标移回它。

问题示例:https://i.imgur.com/k0LJNhH.mp4 我的(失败的)尝试:https://i.imgur.com/4epnkwO.mp4

【问题讨论】:

【参考方案1】:

嗨,如果您使用 react-native-navigation 是为了获取导航 onfocus 事件,然后将焦点设置在导航的焦点上,或者如果您使用平面列表或平面列表网格视图,您应该能够使用滚动到索引或选择该索引,如果你保存它有同样的问题我自己

【讨论】:

以上是关于当 hasTVPreferredFocus 被忽略时,有没有办法强制关注安卓电视上的可选内容?的主要内容,如果未能解决你的问题,请参考以下文章

f:viewAction 被忽略,当 commandButton 导航到页面时

当语法在 vue 组件中看起来很完美时,“外部根元素将被忽略”错误

当使用 startActivityForResult 启动活动时,LaunchMode "singleTop" 会被忽略

为啥过滤统计信息被忽略

UITableViewRowAnimation 被忽略

自定义 SQL 函数 - PL/SQL:语句被忽略