Sub*_*aik 5 accessibility samsung-mobile talkback android-recyclerview
我已在 Note 5 中打开语音助手,并尝试向前移动(从上到下),但当它到达屏幕末尾时,它就会退出 Recyclerview。由于列表中有更多项目,因此它应该自动向上滚动。
我在Samsung Note 5 和 Samsung Note 9中观察到此问题,但在Samsung 9 和 Samsung 9+中运行良好。
我在 RecyclerView 的每一项中都保持了 focusable true 。我已经使用了一种解决方案,但我认为这不是最好的解决方案,任何人都可以建议我什么是最好的方法。
我的解决方案:我通过检测时刻来手动滚动列表。
<RecyclerView>.setAccessibilityDelegateCompat(RVAccessibilityDelegate(<RecyclerView>, <No of item you want to scroll>))
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)
}
}```
Run Code Online (Sandbox Code Playgroud)
代码的简化版本:
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)
}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1151 次 |
| 最近记录: |