2014-09-03 3 views
6

Standardmäßig wird die Zugänglichkeit Services die folgenden für eine EditText AnsichtAndroid Acccessibility: Wie ändere ich den Text laut vorgelesen für eine EditText Ansicht

  • Wenn der EditText einen Wert eingegeben hat ausgelesen = es wird lesen sie den Wert aus
  • Wenn kein Wert eingegeben ist = es wird die „Hinweis“ ausgelesene

ich es will etwas ganz anderes in beiden Fällen auszulesen.

Mein xml-Schnipsel ist

<EditText 
    android:id="@+id/my_edit_text" 
    android:layout_height="wrap_content" 
    android:layout_width="0dp" 
    android:layout_weight="1" 
    android:editable="false" 
    android:focusable="true" 
    android:hint="my hint text"/> 

Ich habe API 14 und weiter zu unterstützen.

Ich möchte nicht auf die Mühe gehen, EditText für diesen einen Fall zu erweitern, daher verwende ich am AccessibilityDelegate.

mEditTextView.setAccessibilityDelegate(accessibilityDelegate); 

Aus der Dokumentation ich, dass in meinem Delegierten verstehe ich muss nur die Methoden in den Delegaten überschreiben für die ich um das Verhalten ändern mögen. Alle anderen Methoden verwenden standardmäßig die Implementierung der Ansicht.

http://developer.android.com/reference/android/view/View.AccessibilityDelegate.html http://developer.android.com/reference/android/view/View.html

Der Doc für "onPopulateAccessibilityEvent", sagt: "Gewährt Euch eine Chance auf den View-Host die Zugänglichkeit Ereignis mit seinem Text, Inhalt zu füllen" Der Doc für "dispatchPopulateAccessibilityEvent", sagt: " Sendet ein AccessibilityEvent an den Host Anzeigen zuerst und dann an seine untergeordneten Objekte zum Hinzufügen ihres Textinhalts zum Ereignis "und das Standardverhalten ist," onPopulateAccessibilityEvent "für die Ansicht selbst aufzurufen und dann" dispatchPopulateAccessibilityEvent "für alle untergeordneten Elemente

http://developer.android.com/guide/topics/ui/accessibility/apps.html

Dieses Dokument sagt unter „onPopulateAccessibilityEvent“ „* Wenn Ihre Implementierung dieses Ereignisses vollständig den Ausgabetext überschreibt, ohne dass andere Teile Ihrer Anlage ermöglicht seinen Inhalt zu ändern, dann rufen Sie nicht die Super Umsetzung dieser Methode in Ihrem Code. "

Daher meine Delegierten sind die folgenden

View.AccessibilityDelegate accessibilityDelegate = new View.AccessibilityDelegate() { 
    @Override 
    public void onPopulateAccessibilityEvent(View v, AccessibilityEvent event) { 
     event.getText().add("Apples"); 
    } 

}; 

Warum, wenn ich die Tastatur verwenden, um zu navigieren oder den Bildschirm auf der EditText tippen verwenden sieht es immer noch „meinen Hinweistext“ und nicht „Äpfel“ liest ?

Wenn ich einen Debugger verwende, sehe ich, dass, bevor ich den Ereignistext festlege, der Text leer ist und nachdem ich ihn eingestellt habe, ist es "Äpfel", aber das TalkBack liest den Hinweis noch vor.


Seltsam, wenn ich „onInitializeAccessibilityNodeInfo“ überschreiben und ein Ereignis mit meinem gewünschten Text senden, dann ist dieser gewünschten Text (Snippet siehe Code) ausgelesen wird. Aber das scheint mir falsch zu sein, da die "onInitializeAccessibilityNodeInfo" auf das EditText-Ereignis reagiert und dann nur ein neues aufruft.

@Override 
public void onInitializeAccessibilityNodeInfo(View v, AccessibilityNodeInfo info){ 
    super.onInitializeAccessibilityNodeInfo(v, info);  
    ... 
    final AccessibilityEvent event = AccessibilityEvent.obtain(eventType); 
    event.getText().add("Pears"); 
    event.setClassName(className); 
    event.setPackageName(packageName); 
    ...  
    v.getParent().requestSendAccessibilityEvent(v, event); 
} 

Antwort

0

wir den Text laut lesen, indem Sie folgende von EditText Ansicht ändern können:

View.AccessibilityDelegate accessibilityDelegate = new View.AccessibilityDelegate() { 
    @Override 
    public void onInitializeAccessibilityNodeInfo(View v, AccessibilityNodeInfo info) { 
     super.onInitializeAccessibilityNodeInfo(v, info); 
     info.setText("some customized text") 
    } 
}; 

und setzen Sie diesen Delegaten dann auf die EditText-Ansicht.

Verwandte Themen