回收站查看可访问性

问题描述 投票:0回答:0

我希望可访问性在下一个项目不在屏幕视图中时停止遍历回收器视图项目。

向右滑动(下一个元素)时,它的工作原理如上所述。如果没有可见的回收器视图项目,它将转到下一个不在回收器视图中的可访问性元素

向右滑动(上一个元素)时没有按预期工作。如果没有可见的项目。回收站视图向左滚动以显示更多可见项目。由于 reclycer 视图具有“无限”的项目列表,因此无法遍历 recycler 视图。

视频参考

重新创建

  • 激活回话辅助功能
  • 向左或向右滑动以遍历无障碍元素树

代码

build.gradle

//enable view binding
buildFeatures {
    viewBinding true
}

activity_main.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\>

MainActivity.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"
        }
    }
}
android android-recyclerview accessibility talkback
© www.soinside.com 2019 - 2024. All rights reserved.