我正在构建一个用于练习文本记忆的应用程序。我有一个文本视图,然后尝试使每个单词可单击,以便在单击它之后,下划线将替换该单词。然后再次单击下划线将还原原始单词。
例如,给定经文:
",狼应与羔羊一起住,豹子和孩子一起躺下;小牛和年轻的狮子和胖子在一起;一个小孩要带领他们。"
单击"狼"one_answers"羊肉"导致:" ____将与____一起住在一起,……"
单击下划线将恢复原始单词:"和 Wolf 应与 lamb ,..."。
到目前为止我能够做的是任务的前半部分:
String text = textView.getText().toString();
final SpannableString spannableString = new SpannableString(text);
String regex = "\S+";
Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
final String word = matcher.group();
final int start = matcher.start();
final int end = matcher.end();
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
try {
Editable editable = (Editable) textView.getText();
editable.replace(start, end, "____");
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void updateDrawState(TextPaint ds) {
//Remove default underline associated with spans
ds.setUnderlineText(false);
}
};
spannableString.setSpan(clickableSpan, start, end,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
好吧,您可以维护布尔变量并根据您的要求进行更新。而且,您还需要根据要在另一个函数中替换的单词的长度创建一个带破折号的字符串。然后,使用基本的setText(),您可以实现自己想要的任何东西。
这对您有帮助吗?