2013-03-21 12 views
7

Zajmuję się usługą Android Accessibility Service. Dostałem AccessibilityNodeInfo, który reprezentuje EditText. Czy istnieje możliwość edycji zawartego tekstu?Ustaw tekst w AccessibilityNodeInfo

Próbowałem z mynode.setText("aaa") ale ja dostać IllegalStateException w sposób opisany w dokumentacji urzędowej http://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo.html

Jakieś pomysły? Dzięki

+0

Nie, to nie jest możliwe, aby ustawić zawartość w EditText z AccessibilityService wykorzystaniem AccessibilityNodeInfo. Węzły dostępności są przeznaczone wyłącznie do odczytu informacji i wykonywania niewielkiego zestawu działań (patrz AccessibilityNodeInfo.performAction). Można jednak wykonać za pomocą edytora IME. – alanv

+0

@alanv, jak byś to zrobił? – r2DoesInc

+2

Wygląda na to, że się myliłem. Od wersji API 18 możesz użyć ACTION_PASTE, aby wstawić tekst z ClipboardManager. W połączeniu z akcjami wyboru tekstu można skutecznie edytować część tekstu; jednakże interfejs API nie był do tego przeznaczony i może nie działać dobrze. – alanv

Odpowiedz

12

Można używać ACTION_SET_TEXT dla> = android 21. Oto przykład tego:

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

Dziękuję bardzo. Uratowałem mój dzień – XylemRaj