Ich habe eine Zeichenfolge in android:Wie man anklickbares Wort mit TextWatcher in EditText in android verbindet?
String meow = "this_is_part1_and_here_another_and_another_one";
ich jedes Wort klickbare mit Clickable
Spanne gemacht.
Es folgt der Code für für jedes Wort klickbare Spanne Implementierung (angepasst von einem Stack-Überlauf Antworten)
String meow = "this_is_part1_and_here_another_and_another_one";
String[] tokens = meow.split("_");
ArrayList<String> tokenList = new ArrayList<String>(Arrays.asList(tokens));
if (meow != null || meow.length() != 0 ) {
_field.setMovementMethod(LinkMovementMethod.getInstance());
_field.setText(addClickablePart(meow, tokenList), EditText.BufferType.SPANNABLE);
// _field.addTextChangedListener(new TextWatcher() {
//
// @Override
// public void afterTextChanged(Editable s) {
// Editable ab = new SpannableStringBuilder(s.toString().replace("A", "a"));
// _field.setText(ab);
// Toast.makeText(getApplicationContext(), s.toString(),Toast.LENGTH_LONG).show();
//
// }
//
// @Override
// public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// }
//
// @Override
// public void onTextChanged(CharSequence s, int start, int before, int count) {
//
// }
// });
}
private SpannableStringBuilder addClickablePart(String str, ArrayList<String> clickableWords) {
SpannableStringBuilder ssb = new SpannableStringBuilder(str);
for (String clickableWord : clickableWords) {
int idx1 = str.indexOf(clickableWord);
int idx2 = 0;
while (idx1 != -1) {
idx2 = idx1 + clickableWord.length();
final String clickString = str.substring(idx1, idx2);
ssb.setSpan(new MyClickableSpan(clickString), idx1, idx2, 0);
idx1 = str.indexOf(clickableWord, idx2);
}
}
return ssb;
}
class MyClickableSpan extends ClickableSpan {
String clicked;
public MyClickableSpan(String string) {
super();
clicked = string;
}
public void onClick(View widget) {
Toast.makeText(widget.getContext(), clicked, Toast.LENGTH_LONG).show();
}
public void updateDrawState(TextPaint ds) {// override updateDrawState
ds.setUnderlineText(false); // set to false to remove underline
}
}
Wenn ich ein bestimmtes Wort tippen, zeige ich einen Toast des Wortes. Nun, was ich will ist, wenn ich dieses spezielle Wort anklicke, nachdem ich dieses Wort für ein paar Sekunden gezeigt habe, wird dieses Wort in EditText leer, und ich tippe ein neues Wort an seine Stelle und erhalte diese bestimmte Zeichenfolge.
this_is_part1_and_here_another_and_another_one
ich auf Wort part1
tippen:
Z. B Folgendes ist in EditText
gezeigt. Nach zeigt part1
in Toast für ein paar Sekunden, wird das Wort leer in EditText wie folgt aus:
this_is_ _and_here_another_and_another_one
Jetzt tippe ich ein neues Wort an seiner Stelle sagen woof
this_is_woof_and_here_another_and_another_one
An d Ich kann das Wort woof
in einer Zeichenfolge speichern.
Wie geht das? Kurz gesagt, wie kann ich meine anklickbaren Wörter mit TextWatcher verknüpfen? Ich habe den TextWatcher-Teil kommentiert, da ich nicht weiß, wie er ClickableSpan zuordnen kann. Bitte hilf mir dabei. Vielen Dank.
Welche Zeichenfolge zum Speichern des Wortes 'woof'? –
Es ist nur ein Beispiel. Ich möchte alle vorherigen anklickbaren Wörter und alle bearbeiteten Wörter in diesem Wort in einer Karte/Multimap speichern –