Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么ListView和RecyclerView焦点可调到TouchMode?_Android_Android Listview_Android Recyclerview - Fatal编程技术网

Android 为什么ListView和RecyclerView焦点可调到TouchMode?

Android 为什么ListView和RecyclerView焦点可调到TouchMode?,android,android-listview,android-recyclerview,Android,Android Listview,Android Recyclerview,ListView(确切地说是AbsListView)和RecycleView都在其构造函数中调用setFocusableInTouchMode(true) 根据我的理解(部分基于离线)和(有限的)构建键盘可访问应用程序的经验,很少有应用程序需要启用此属性 在帖子中,他解释道: 此特殊模式是为接收文本输入的小部件创建的,例如EditText,或者在启用过滤时为ListView P>我理解编辑文本,当用户触摸它时,它可以获得焦点(可以在触摸模式下聚焦),这样键输入可以被引导到正确的视图(如果在单个

ListView(确切地说是AbsListView)和RecycleView都在其构造函数中调用setFocusableInTouchMode(true)

根据我的理解(部分基于离线)和(有限的)构建键盘可访问应用程序的经验,很少有应用程序需要启用此属性

在帖子中,他解释道:

此特殊模式是为接收文本输入的小部件创建的,例如EditText,或者在启用过滤时为ListView

<> P>我理解编辑文本,当用户触摸它时,它可以获得焦点(可以在触摸模式下聚焦),这样键输入可以被引导到正确的视图(如果在单个屏幕上考虑多个编辑文本的情况,这很容易理解)。 我不明白“过滤”是什么意思(以及为什么需要启用此属性),也不明白为什么它是在构造函数中默认设置的


我面临的问题(提示这个问题)是当我试图在ViewPager中启用键盘导航时。这就是我的结局:

每个页面都是一个RecyclerView。RecyclerView中的每个项目视图都是可聚焦的,并且具有正确的焦点和按下状态,如gif中所示


理想情况下(我的结果并不理想),如果用户专注于位置X,并向右导航,那么他们应该在下一列的相应行中:

[ ][ ]|[ ][ ]       [ ][ ]|[ ][ ]
[ ][X]|[ ][ ]   ->  [ ][ ]|[X][ ]     
[ ][ ]|[ ][ ]       [ ][ ]|[ ][ ]
默认情况下,由于RecyclerView在触摸模式下可聚焦(因此根据定义可聚焦),右侧的整个RecyclerView获得聚焦,但用户不知道发生了什么。他们必须按下,然后RecyclerView将关注所有可用的儿童:

[ ][ ]|[ ][ ]       [ ][ ]|[ ][ ]       [ ][ ]|[X][ ]
[ ][X]|[ ][ ]   ->  [ ][ ]|[ ][ ]   v   [ ][ ]|[ ][ ]     
[ ][ ]|[ ][ ]       [ ][ ]|[ ][ ]       [ ][ ]|[ ][ ]
在布局的第一个视图中结束

因此,您可以在RecyclerViews上将
android:DegenantFocusability
属性设置为
AfterDegenders
,或者在RecyclerView上调用
SetFocusability(false)
(不能在XML中执行,因为它是在构造函数调用
setFocusableInTouchMode(true)
之前设置的),这意味着它将直接进入布局的第一个视图:

[ ][ ]|[ ][ ]       [ ][ ]|[X][ ]
[ ][X]|[ ][ ]   ->  [ ][ ]|[ ][ ]     
[ ][ ]|[ ][ ]       [ ][ ]|[ ][ ]
(如果按向左键,从右页向左移动,则将转到最后一个布局的视图。)

我选择了
genderantfocusability
属性,虽然它工作得很好(但不是如图所示的理想),但我不理解为什么AblistView和RecyclerView可聚焦(/Focusability in touch mode)。

我提到了“理想”情况,但这可能取决于具体情况,应该由用户测试。刚刚尝试了带有键盘导航的默认JellyBean启动器,它看起来更直观——尽管在页面之间导航更困难,但它更明确。