通过单击并存储来替换文本以进一步单击

时间:2017-11-21 21:52:13

标签: android textview clickable

我正在构建一个练习文本记忆的应用程序。 我有一个textview,并且我尝试使每个单词都可以点击,这样在单击它之后,下划线将替换该单词。然后再次单击下划线将恢复原始单词。

例如,给出这节经文:

  

"狼必与羔羊同居,豹子将与孩子躺下;小牛和小狮子和母亲在一起;一个小孩子应该带领他们。"

点击“狼”'和'羊肉'导致: " ____将与____,..."
一起居住 单击下划线可恢复原始单词: " 将与羔羊,..."

一起居住。

到目前为止,我能够完成的任务是上半部分任务:

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);
}

1 个答案:

答案 0 :(得分:-2)

好吧,您可以维护布尔变量并根据您的要求更新它。并且还需要根据要在另一个函数中替换的单词的长度来创建带有破折号的字符串。然后使用基本的setText(),您可以实现任何您想要的。

这对你有帮助吗?