Android:Wie kann ich gesprochenen Text aus AccessibilityEvents entfernen, wenn ich SeekBar erweitere?
-
20-12-2019 - |
Frage
Meine Android-App enthält ein benutzerdefiniertes Schieberegler-Steuerelement, das auf dem basiert SeekBar
, und ich möchte meinem Steuerelement eine benutzerdefinierte Textphrase hinzufügen, um dessen Verwendung für Barrierefreiheit zu erläutern.
Ich habe dies erfolgreich mit durchgeführt View.setContentDescription(text)
, und TalkBack spricht den Satz korrekt aus, wenn ich den Fokus auf mein Schieberegler-Steuerelement anfordere Activity.onCreate
.
So weit, ist es gut.Wenn ich jedoch das Steuerelement berühre, das meiner Meinung nach den AccessibilityFocus auf meinem Android API 16-Testgerät festlegt, werden der gesprochenen Phrase zusätzliche Wörter hinzugefügt, d. h.„… Kontrolle suchen.“0 Prozent‘.Ich möchte diese zusätzlichen Wörter entfernen.
Ich habe versucht, sie mit zu beseitigen event.getText().clear()
In View.onInitializeAccessibilityEvent(event)
ohne Erfolg.Durch das Echo des Ereignisses an LogCat wird der korrekte Ausdruck gemeldet event.contentDescription
und keine Einträge in event.text
, aber die zusätzlichen Wörter erscheinen sowohl in der Audioausgabe der Gerätehardware als auch im Debug-Text auf dem Bildschirm, der von angezeigt wird Menü->Einstellungen->Eingabehilfen->TalkBack->Einstellungen->Entwicklereinstellungen->Sprachausgabe anzeigen.
Kann mir bitte jemand vorschlagen, wo die zusätzlichen Wörter hinzugefügt werden und wie man sie entfernt?
Alle konstruktiven Vorschläge wären willkommen.Danke.
Aktualisieren
Ich kann sehen, dass einige „Explore By Touch“-Ereignisse (anfängliches einmaliges Tippen) in meinem benutzerdefinierten Steuerelement nicht durch eines der beiden gesteuert werden onInitializeAccessibilityEvent
oder dispatchPopulateAccessibilityEvent
Methoden, wie ich sie bewusst nenne event.setContentDescription(null)
.Trotzdem gibt es eine AccessibilityEvent
wird mit meinen benutzerdefinierten Steuerelementen generiert ContentDescription
, eingesetzt Activity.onCreate
im Code, plus die zusätzlichen Wörter, die ich entfernen möchte.
Ich habe auch eine eingestellt AccessibilityDelegate
auf dem übergeordneten Element meines benutzerdefinierten Steuerelements ViewGroup
um es sichtbar zu machen onRequestSendAccessibilityEvent
Anrufe.Dies bestätigt, dass kein Ereignis meine enthält ContentDescription
ist auf der Durchreise.
Das ist sehr rätselhaft und passiert sowohl auf dem Emulator als auch auf echter Hardware mit API 16.Irgendwelche Ideen?
Lösung 2
Ich glaube, dass dies ein Fehler in TalkBack ist, und habe ihn gemeldet Google Eyes-Free-Problem Nr. 375, inklusive Beispielcode.
Aktualisieren: Google hat dies nun archiviert.Link verschoben nach: http://code.google.com/archive/p/eyes-free/issues/375
Andere Tipps
Sie müssen auch überschreiben http://developer.android.com/reference/android/view/View.html#onInitializeAccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo)
und legen Sie dort die contentDescription fest.
Wenn Sie die 0 % entfernen möchten, würde ich versuchen, die Klasse in AccessibilityNodeInfo/AccessibilityEvent zu ändern:http://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo.html#setClassName(java.lang.CharSequence)