0

Ich versuche, TalkBack zu bekommen, um zu sagen, was in dem Text ist, der in der host Ansicht ist, zusammen mit "ist cool" danach.Wie extrahiert man den Text aus Sichten in AccessibilityNodeInfo von AccessibilityDelegate?

Dazu setze ich einen Erreichbarkeitsdelegaten auf ein lineares Layout, aber die text- und contentDescription -Eigenschaften des info-Parameters sind immer null. d.h. info.getText() und info.getContentDescription() geben immer null zurück. Ich kann nicht scheinen, den Text von den geschachtelten TextViews zu extrahieren.

Der Parameter host ist also ein lineares Layout, das ein anderes verschachteltes lineares Layout enthält. Dieses verschachtelte lineare Layout enthält wiederum verschachtelte Layouts und Textansichten als untergeordnete Elemente. (I API bin Targeting 21+)

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

     String newWordsToSay = info.getText() + " is cool" 
     //info.getText() CRASHES due to null pointer exception 
     info.setContentDescription(info.setText(newWordsToSay)); 
    } 
}); 

EDIT: Auf den host param Überprüfung, alle erwarteten verschachtelten Textviews sind, mit ihren jeweiligen Textfelder. Das Problem ist, ich kann den Text nicht von ihnen extrahieren.

Jede Hilfe wäre willkommen.

+0

Wenn Sie eine Inhaltsbeschreibung für eine ViewGroup festlegen, wird TalkBack daran gehindert, Text von den untergeordneten Elementen zu aggregieren. Sie müssten den untergeordneten Text manuell aggregieren und diesen zum Auffüllen Ihrer Inhaltsbeschreibung verwenden. Oder Sie könnten eine 0px TextView als untergeordnetes Objekt hinzufügen und diesem den Text zuweisen, der angehängt werden soll. Keines dieser Verfahren ist sehr zuverlässig, da die Barrierefreiheits-APIs nicht darauf ausgelegt sind. – alanv

Antwort

1

Es sieht so aus, als ob Sie über die Kinder iterieren müssen.

Sie können die für die Zugänglichkeit relevanten Kinder mit der Methode View::addChildrenForAccessibility(ArrayList<View> list) sammeln, sie füllt die übergebenen list. Dann können Sie ihre Texte verketten:

+0

Das funktioniert! Vielen Dank! – Vinnie

Verwandte Themen