2013-03-21 11 views
7

Ich entwickle einen Android Accessibility Service. Ich habe eine AccessibilityNodeInfo, die einen EditText darstellt. Kann der enthaltene Text bearbeitet werden?Text in AccessibilityNodeInfo setzen

Ich habe versucht, mit mynode.setText("aaa") aber ich bekomme IllegalStateException wie in der offiziellen Dokumentation beschrieben http://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo.html

Irgendwelche Ideen? Dank

+0

Nein, es ist nicht möglich, den Inhalt eines EditText von einem AccessibilityService mit AccessibilityNodeInfo einzustellen. Accessibility-Knoten sind nur zum Lesen von Informationen und Ausführen einer kleinen Anzahl von Aktionen gedacht (siehe AccessibilityNodeInfo.performAction). Sie können dies jedoch über einen IME erreichen. – alanv

+0

@alanv, wie würdest du das machen? – r2DoesInc

+2

Eigentlich sieht es so aus, als hätte ich mich geirrt. Ab API 18 können Sie ACTION_PASTE verwenden, um Text aus ClipboardManager einzufügen. Kombiniert mit den Textauswahlaktionen können Sie effektiv einen Textabschnitt bearbeiten. Die API war jedoch nicht wirklich dafür vorgesehen und funktioniert möglicherweise nicht gut. – alanv

Antwort

12

Sie ACTION_SET_TEXT für> = android 21 verwenden können Hier ist das Beispiel dafür:

AccessibilityNodeInfo source = event.getSource(); 
if (source != null & event.getClassName().equals("android.widget.EditText")) { 
    Bundle arguments = new Bundle(); 
    arguments.putCharSequence(AccessibilityNodeInfo 
      .ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, "android"); 
    source.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments); 
} 
+0

Vielen Dank. Habe meinen Tag gerettet – XylemRaj

Verwandte Themen