我有一个RecyclerView,它在网格部分显示内容,其中每个网格部分由非交互式TextView引导(如果你点击/点击它就没有任何反应)。
如果我在非触摸模式下导航屏幕(仅使用键盘/遥控器/轨迹球),那么显然我需要一个焦点状态:
如果我向下浏览RecyclerView,使“第1部分”在屏幕外,然后再次备份 - 滚动将停在第1部分下的顶部网格项目,然后下一个焦点项目将是汉堡菜单; 第1部分仍然会在屏幕外,因为它不可调焦 - 它不会滚动到顶部。
在触控模式下,这不是问题;用户可以向上滚动。在非触摸模式下,我可以使章节标题可以集中 - 但是在语义上让这些非交互元素具有焦点状态是没有意义的(除了TalkBack之外的辅助服务 - 如果启用了TalkBack,当然,它们可以集中精力)。
如果不设置可聚焦的节标题,有什么方法可以确保在使用轨迹球向上导航列表时,它会在关注下一个元素(汉堡包)之前滚动到列表顶部(包括节标题)菜单)?
以下是单个RecyclerView项目的代码 - 它包含整个部分:非交互式部分标题,以及下面的3个交互式元素。显示android:focusable="false"
以突出显示问题(默认情况为false)。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/category_text_heading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true" />
</LinearLayout>
这张照片说明了问题:
此处汉堡图标已聚焦,但RecyclerView尚未滚动到内容的顶部。如果我将“第1部分”调焦,那么使用键盘/轨迹球向上导航将允许“第1部分”获得焦点,并且所有可聚焦元素都会移动到视图中,因此它会滚动到顶部,然后再次按下,专注于汉堡包图标。