覆盖SeekBar的默认对讲公告

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

Seekbar
中应用
setOnSeekBarChangedListener
的辅助功能内容描述,对讲会读取搜索栏评级状态(以百分比表示),然后读取内容描述,例如“100% 10 评级非常满意”

id做了什么

onProgressChanged
onStopTrackingTouch

调用此函数

这是函数的代码快照

void setAccessibilityTextForView(View mSeekBar, String msg) {
    if (AccessibilityHandler.isAccessibilityEnabled(this)) {
        if (mSeekBar != null) {
            mSeekBar.setContentDescription(msg)

        }
    }
}

实际结果:“100% 10 评级非常满意” 期望:对讲应该只准备好我应用的内容描述,例如“10 级非常满意”

android accessibility seekbar talkback
1个回答
0
投票

所以当我查看 stateDescription

 文档时:

状态描述简要描述了视图的状态,主要用于辅助功能支持,以确定如何将视图的状态呈现给用户。它是对布尔状态(例如,选中/未选中)的补充,用于自定义状态描述(例如,“wifi、已连接、三栏”)。 状态描述经常变化,而内容描述应该不那么频繁变化

这似乎表明

stateDescription
应该是更经常更新的。

我不知道您使用的滑块是什么版本,也不知道为什么它不是

RatingBar
(我知道 XML 视图中的滑块继承自 SeekBar) - 但我想我无论如何都可以帮助您。

我认为问题是你没有设置stateDescription:

  1. 在初始化时
  2. 关于改变
    private fun setSeekBarStateDescription() {
        ViewCompat.setStateDescription(
            seekbar,
            when {
                seekbar.progress <= 20 -> "1 star"
                seekbar.progress in 21..40 -> "2 star"
                seekbar.progress in 41..60 -> "3 star"
                seekbar.progress in 61..80 -> "4 star"
                else -> "5 stars"

            }
        )
    }
    

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_rating_bar)

        ...

        seekbar.apply {
            setSeekBarStateDescription()
            setOnSeekBarChangeListener(object : OnSeekBarChangeListener {
                override fun onProgressChanged(
                    seekBar: SeekBar?,
                    progress: Int,
                    fromUser: Boolean
                ) {
                    setSeekBarStateDescription()
                }

                override fun onStartTrackingTouch(seekBar: SeekBar?) = Unit

                override fun onStopTrackingTouch(seekBar: SeekBar?) = Unit
            })
        }
    }

我的 XML 如下所示:

        <SeekBar
            android:id="@+id/seekBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:max="100"
            />

我得到的输出似乎正是你所期望的:

© www.soinside.com 2019 - 2024. All rights reserved.