I would like to make my app accessible with Tlkback, but I don't know how could I set different content descriptions for both states of a switch or toggle button.
Do you have any suggestions?
I would like to make my app accessible with Tlkback, but I don't know how could I set different content descriptions for both states of a switch or toggle button.
Do you have any suggestions?
You can set content description programmatically like this.
toggleButton.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick( View v ) {
if( toggleButton.isChecked() ) {
toggleButton.setContentDescription( "Selected" );
} else {
toggleButton.setContentDescription( "Unselected" );
}
}
} );
Use AccessibilityNodeInfo's setChecked and 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());
And then add delegate to your view/layout/etc.
class MyButton extends View {
...
public constructor() {
setAccessibilityDelegate(new MyAccessibilityDelegate(this);
}
...
}
Explanation: All accessibility services should be using AccessibilityNodeInfo to determine what is spoken out loud. setCheckable makes the service aware that the View has modifiable states, while setChecked actually changes the "checked/not checked" callout.