回收器视图中的 Android 辅助功能语音助手问题



我已经在我的Note 5中打开了我的语音助手,并试图向前移动(从上到下(,但是当它到达屏幕末尾时,它正在退出Recyclerview。 由于列表中还有更多项目,因此它应该自动向上滚动。

我在三星Note 5和三星Note 9中观察到此问题,但它在三星9和三星9 +中工作正常。

我一直在RecyclerView的每一项中都保持了可聚焦的真实性。 我已经使用了一个解决方案,但我认为这不是最好的解决方案,任何人都可以建议我什么是最好的方法。

我的解决方案:我通过检测时刻手动滚动列表。

回收商查看

<RecyclerView>.setAccessibilityDelegateCompat(RVAccessibilityDelegate(<RecyclerView>, <No of item you want to scroll>))

RVAccessibilityDelegate

RecyclerViewAccessibilityDelegate(recyclerView){
private var previousItemPosition = 0
override fun onRequestSendAccessibilityEvent(host: ViewGroup, child: View, event: AccessibilityEvent): Boolean {
if (event.eventType == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) {

if (host is RecyclerView) {
var childPosition = host.getChildAdapterPosition(child)
if (childPosition == 0 && previousItemPosition == 0) {
host.smoothScrollToPosition(1)
} else if (previousItemPosition < childPosition) {
host.smoothScrollToPosition(childPosition + scrollItem)
previousItemPosition = childPosition
} else if (previousItemPosition > childPosition) {
var scrollUpto = childPosition - scrollItem
if (scrollUpto < 0) {
scrollUpto = 0
}
if (childPosition == 0) {
host.smoothScrollToPosition(childPosition)
} else {
host.smoothScrollToPosition(scrollUpto)
}
previousItemPosition = childPosition
}
}
return true
}
return super.onRequestSendAccessibilityEvent(host, child, event)
}
}```


代码的简化版本:

recyclerView.setAccessibilityDelegateCompat(object : RecyclerViewAccessibilityDelegate(recyclerView) {
private var previousItemPosition = 0
override fun onRequestSendAccessibilityEvent(host: ViewGroup, child: View, event: AccessibilityEvent): Boolean {
if (event.eventType == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) {
if (host is RecyclerView) {
val childPosition = host.getChildAdapterPosition(child)
if (previousItemPosition < childPosition) {
host.smoothScrollToPosition(childPosition + 1)
} else if (previousItemPosition > childPosition) {
host.smoothScrollToPosition(Math.max(0, childPosition - 1))
}
previousItemPosition = childPosition
}
return true
}
return super.onRequestSendAccessibilityEvent(host, child, event)
}
})

最新更新