android 回收机视图可访问性

4szc88ey  于 2023-03-16  发布在  Android
关注(0)|答案(1)|浏览(127)

我希望辅助功能停止遍历回收查看项目时,下一个项目不在屏幕视图。
当向右滑动(下一个元素)时,它的工作方式如上所述。如果没有可见的回收器视图项目,它将转到下一个不在回收器视图中的辅助功能元素
当向右滑动时(前一个元素),它不会按预期工作。如果没有可见项目。回收器视图向左滚动以显示更多可见项目。由于回收器视图具有“无限”项目列表,因此无法遍历出回收器视图。
video reference

重新创建

  • 激活对讲可访问性
  • 向左或向右滑动以遍历辅助功能元素树

代码

生成分级

//enable view binding
buildFeatures {
    viewBinding true
}

活动_主要.xml

<?xml version="1.0" encoding="utf-8"?\>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00FFFF"
android:importantForAccessibility="yes"
android:focusable="true"
android:orientation="vertical"\>

    <TextView
        android:textSize="30sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusableInTouchMode="true"
        android:importantForAccessibility="yes"
        android:text="TITLE"
        android:layout_gravity="center" />
    
    
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:focusableInTouchMode="true"
        android:descendantFocusability="beforeDescendants"
        android:orientation="horizontal"
        android:importantForAccessibility="yes"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
        tools:listitem="@layout/item_blank" />
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="NEXT ITEM"
        android:focusableInTouchMode="true"
        android:textColor="@color/teal_700"
        android:background="@color/black"
        android:layout_gravity="center"
        android:layout_marginVertical="100dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/blankView" />

</LinearLayout\>

主要活动.kt

class MainActivity : AppCompatActivity() {
    lateinit var binding : ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        with(binding) {
            recyclerView.adapter = Adapter()
            val number: Int = Int.MAX_VALUE / 3 / 2
            recyclerView.scrollToPosition(number)
        }
    }
}

class Adapter : RecyclerView.Adapter<Adapter.ViewHolder>() {

    val noOfItems = 3

    class ViewHolder(val binding: ItemBlankBinding) : RecyclerView.ViewHolder(binding.root)

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return ViewHolder(ItemBlankBinding.inflate(LayoutInflater.from(parent.context),parent, false))
    }

    override fun getItemCount(): Int {
        return Integer.MAX_VALUE;
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val index = position % noOfItems
        with(holder.binding) {
            textView.text = index.toString()
            root.contentDescription = "$index"
        }
    }
}
vmdwslir

vmdwslir1#

标题是你的朋友,如果你确保你的内容在recylerview下面有一个标题,人们可以改变他们的粒度为标题(三个手指水平滑动),然后使用粒度(上下滑动)跳过。

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:accessibilityHeading="true"
    android:text="@string/my_heading_before_recycler_view"
    />

<androidx.recyclerview.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:accessibilityHeading="true"
    android:text="@string/my_heading_after_recycler_view"
    />

我今天published a blog on Android headings了,但是如果你想快点,我上传了一个video for you demonstrating how to use headings
记住,标题是API 28之后的内容,如果您支持的内容较少,您可能需要创建某种跳过操作-您可以在“recyclerview”中添加一个可访问性操作,跳过列表并专注于下一个元素。
还要记住,用户可能无论如何都可以使用explore by touch来克服recyclerview
这两个解决方案都没有处理运动障碍或使用开关访问,但老实说,行动的例子是足够强大的工作,它将需要谷歌表面的行动,这些用户-所以我不认为这是对开发人员。

相关问题