在
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 级非常满意”
所以当我查看 stateDescription
状态描述简要描述了视图的状态,主要用于辅助功能支持,以确定如何将视图的状态呈现给用户。它是对布尔状态(例如,选中/未选中)的补充,用于自定义状态描述(例如,“wifi、已连接、三栏”)。 状态描述经常变化,而内容描述应该不那么频繁变化。
这似乎表明
stateDescription
应该是更经常更新的。
我不知道您使用的滑块是什么版本,也不知道为什么它不是
RatingBar
(我知道 XML 视图中的滑块继承自 SeekBar) - 但我想我无论如何都可以帮助您。
我认为问题是你没有设置stateDescription:
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"
/>
我得到的输出似乎正是你所期望的: