it-swarm.com.de

So ändern Sie die Android Talkback-Anweisungen für doppeltes Tippen und langes Drücken

Ich habe eine Ansicht, die über einen langen Aktionshandler verfügt. Ich verwende die Inhaltsbeschreibung, um die Nachricht festzulegen, die Talkback spricht, wenn die Ansicht den Fokus erhält.

Derzeit sagt es meine Inhaltsbeschreibung direkt nach dem Erhalten eines Fokus und nach einer kurzen Pause:

Doppeltippen zum Aktivieren, Doppeltippen und Halten für langes Drücken

Ich möchte diese Nachricht in etwas ändern

Doppeltippen auf "Aktion 1" , zweimal tippen und halten für "Aktion 2"

Gibt es eine Möglichkeit, dies zu tun?

Ich habe in onPopulateAccessibilityEvent() nachgesehen, es bekommt TYPE_VIEW_ACCESSIBILITY_FOCUSED Ereignis, aber ich konnte die gewünschte Nachricht nicht ändern. 

Fehlt mir etwas einfaches?

7
Paul

Es scheint, dass AccessibilityAction sich leicht verändert hat, seit alanv seine Antwort gepostet hat. Hier ist eine funktionierende Lösung mit ViewCompat:

ViewCompat.setAccessibilityDelegate(view, new AccessibilityDelegateCompat() {
    @Override
    public void onInitializeAccessibilityNodeInfo(View Host, AccessibilityNodeInfoCompat info) {
        super.onInitializeAccessibilityNodeInfo(Host, info);
        // A custom action description. For example, you could use "pause"
        // to have TalkBack speak "double-tap to pause."
        CharSequence description = Host.getResources().getText(R.string.my_click_desc);
        AccessibilityActionCompat customClick = new AccessibilityActionCompat(
                    AccessibilityNodeInfoCompat.ACTION_CLICK, description);
        info.addAction(customClick);
    }
});
5
JustinMorris

In API 21+ können Sie die Aktionsnamen anpassen, indem Sie benutzerdefinierte Aktionen für die AccessibilityNodeInfo Ihrer Ansicht einrichten. Dafür gibt es zwei Ansätze: 1) Setzen Sie eine AccessibilityDelegate und überschreiben Sie die Delegate-Methode onInitializeAccessibilityNodeInfo oder 2) erweitern Sie die Sichtklasse und überschreiben Sie onInitializeAccessibilityNodeInfo.

In jedem Fall konstruieren Sie eine neue AccessibilityAction und setzen diese mithilfe von AccessibilityNodeInfo.addAction auf dem Knoten.

Wenn Sie sich für die Verwendung eines Delegaten entschieden haben, legen Sie eine benutzerdefinierte Beschreibung für die Klickaktion wie folgt fest:

view.setAccessibilityDelegate(new AccessibilityDelegate() {
  @Override
  public void onInitializeAccessibilityNodeInfo(
      View v, AccessibilityNodeInfo info) {
    super.onInitializeAccessibilityNodeInfo(v, info);

    // A custom action description. For example, you could use "pause"
    // to have TalkBack speak "double-tap to pause."
    CharSequence description = getResources().getText(R.string.my_click_desc);
    AccessibilityAction customClick = new AccessibilityAction(
            AccessibilityAction.ACTION_ACTION_CLICK, description);
    info.addAction(customClick);
  }
});

Wenn Sie eine Anwendungs-API <21 verwenden, ersetzen Sie die entsprechenden Bibliotheksmethoden für *Compat. Die Funktion wird nicht zurückportiert, sodass Sie keine benutzerdefinierten Beschreibungen für API <21 erhalten, Sie können jedoch explizite Versionsprüfungen in Ihrem Anwendungscode vermeiden.

8
alanv

Verwenden Sie den folgenden Code für diejenigen, die den gesamten Satz entfernen möchten, z. "Doppeltippen auf".

ViewCompat.setAccessibilityDelegate(view, new AccessibilityDelegateCompat() {
        @Override
        public void onInitializeAccessibilityNodeInfo(View Host, AccessibilityNodeInfoCompat info) {
            super.onInitializeAccessibilityNodeInfo(Host, info);
            info.addAction(AccessibilityNodeInfoCompat.ACTION_FOCUS);
        }
});

Grundsätzlich wird der folgende Code aufgerufen, und requestFocus ist keine Standard-Talkback-Ankündigung zugeordnet.

case AccessibilityNodeInfo.ACTION_FOCUS: {
                if (!hasFocus()) {
                    // Get out of touch mode since accessibility
                    // wants to move focus around.
                    getViewRootImpl().ensureTouchMode(false);
                    return requestFocus();
                }
            }
1
Rubin Yoo

Verwenden Sie den folgenden Code für diejenigen, die den gesamten Satz entfernen möchten, z. "Doppeltippen, um zu aktivieren", "Doppeltippen und lange gedrückt halten".

mSubTitleText = (TextView) view.findViewById(R.id.txt_subtitle);

 ViewCompat.setAccessibilityDelegate(mSubTitleText, new AccessibilityDelegateCompat() {
            @Override
            public void onPopulateAccessibilityEvent(View Host, AccessibilityEvent event) {
                Host.setClickable(false);
                Host.setLongClickable(false);
            }
        });
0
Azeela