Wie kann ich EditText mit Clickable-fähigen und noch von LongClick selektierbaren Spannbaren haben?

9

Ich habe TextView mit Bereichen des Typs ClickableStringSpan wie folgt definiert:

%Vor%

Ich setze klickbare Bereiche auf meinen Text wie folgt:

%Vor%

Nun möchte ich diese Zeichenfolge auf EditTexts statt auf TextViews anwenden. Alles ist in Ordnung nur anklickbare Zeichenfolgen werden jetzt nicht mehr angeklickt. Ich möchte wissen, wie ich Klicks auf diese Art von Spannen an den zugewiesenen Clicklistener weitergeben kann.

Update: Mein Hauptanliegen beim Bearbeiten von Text ist, dass ich dem Benutzer erlauben möchte, einen Teil des Textes auszuwählen und ihn zu teilen, während er auf ClickableSpans klicken kann.

    
VSB 29.04.2014, 11:31
quelle

3 Antworten

9

Sie müssen die Bewegungsmethode von TextView / EditText auf LinkMovementMethod einstellen, um auf Links zu klicken. Leider deaktiviert dies die Möglichkeit, Text auszuwählen, der nur funktioniert, wenn Sie die Bewegungsmethode auf ArrowKeyMovementMethod setzen. Ссылка Ссылка

Um dies zu lösen, habe ich eine benutzerdefinierte MovementMethod-Klasse erstellt, die von ArrowKeyMovementMethod erbt und die Möglichkeit hinzufügt, auf Links zu klicken. :

%Vor%

Alles was Sie tun müssen, ist die Bewegungsart Ihres EditText und Sie können loslegen:

%Vor%

Der obige Code funktioniert nur mit unformatiertem Text. Wenn Sie also entscheiden, Ihren Text mit Textstilen (fett, kursiv usw.) oder mit unterschiedlichen Schriftgrößen zu formatieren, wird der angeklickte Link nicht mehr gefunden. Ich habe den Code, um mit formatiertem Text umzugehen, aber da das nicht Teil der Frage war, habe ich den Beispielcode so kurz wie möglich gemacht.

    
Emanuel Moecklin 09.05.2014, 13:47
quelle
1

Das folgende Codebeispiel sollte für Sie funktionieren, ich habe es auch getestet und es gibt Klickereignisse von ClickableSpanString

Vielleicht haben Sie vergessen, setMovementMethod

hinzuzufügen %Vor%     
MKJParekh 29.04.2014 11:47
quelle
0
%Vor%     
Haresh Chhelana 29.04.2014 12:16
quelle