我在android中有一个字符串:
String meow = "this_is_part1_and_here_another_and_another_one";
我使用Clickable
span来点击每个单词。
以下是为每个单词实现可点击范围的代码(改编自Stack Overflow答案之一)
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
}
}
当我点击某个特定单词时,我会显示该单词的祝酒词。现在,我想要的是当我点击那个特定单词后,在显示该单词几秒后,该单词将在EditText中变为空白,并在其位置键入一个新单词,并获得该特定字符串。
E.g以下内容显示在EditText
:
this_is_part1_and_here_another_and_another_one
点按part1
字词。在吐司中显示part1
几秒后,EditText中的单词变为空白,如下所示:
this_is_ _and_here_another_and_another_one
现在我在其位置输入一个新单词woof
this_is_woof_and_here_another_and_another_one
我将单词woof
存储在一个字符串中。
怎么做?简而言之,如何使我的可点击单词与TextWatcher相关联?我评论了TextWatcher部分,因为我不知道如何将它与ClickableSpan相关联。请帮帮我。感谢。
答案 0 :(得分:0)
我认为你不能超过&#34;跨度中的不同单词。您只需在点击监听器上获取文本视图即可。我建议您构建一个ViewGroup
,其中包含一个或多个字词,并且可以响应单个字词点击,
class HyperText extends LinearLayout {
...
public static interface OnTextClickedListener {
public void onTextClicked(String text);
}
public void addText(String text) {
TextView tv = new TextView(...); // or inflate it from somewhere
tx.setOnClickListener(...); // call onTextClicked(this.getText());
addView(tv);
}
}
类似的东西。