我希望我能使我的应用程序支持Tlkback,但我不知道如何为开关或切换按钮的两种状态设置不同的内容描述。
你有什么建议吗?
我希望我能使我的应用程序支持Tlkback,但我不知道如何为开关或切换按钮的两种状态设置不同的内容描述。
你有什么建议吗?
toggleButton.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick( View v ) {
if( toggleButton.isChecked() ) {
toggleButton.setContentDescription( "Selected" );
} else {
toggleButton.setContentDescription( "Unselected" );
}
}
} );
AccessibilityNodeInfo
的 setChecked
和 setCheckable
方法。详情请参考:https://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo#setCheckable(boolean)。class MyAccessibilityDelegate extends View.AccessibilityDelegate {
MyButton button;
public constructor (MyButton button) {
this.button = button;
}
@Override
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(host, info);
info.setCheckable(true);
info.setChecked(button.getChecked());
然后将代理添加到您的视图/布局等中。
class MyButton extends View {
...
public constructor() {
setAccessibilityDelegate(new MyAccessibilityDelegate(this);
}
...
}
解释:所有辅助功能服务都应使用AccessibilityNodeInfo
来确定什么被大声朗读。 setCheckable
使服务意识到View
具有可修改的状态,而setChecked
实际上更改了“选中/未选中”呼叫。
MyAccessibilityDelegate
添加到视图的根部,以便TalkBack一起读取所有内容。然后,新问题将是,TalkBack将更早地读取Switch的状态。 - Dr.jackyimportantForAccessibility=true
。 TalkBack将自动汇总所有子视图的辅助功能信息,并按照辅助功能顺序阅读它们,包括具有MyAccessibilityDelegate
的子MyButton
。 - essen_starimportantForAccessibility="yes"
,但 TalkBack 读取除 Switch 之外的所有子元素!这就是我来到这个问题和答案的原因。尝试使用委托设置 cd,但也没有起作用。(我尝试了在 Switch 和父级上都设置委托的解决方案) - Dr.jackyCardView
。然后下一个父级是ConstraintLayout
。 - Dr.jacky