android – 按下时在文本视图中突出显示单词

android – 按下时在文本视图中突出显示单词,第1张

概述我有一个TextView来显示一段文字,我希望我的应用程序在按下时使用TTS说出单个单词.如果按下时可以突出显示单词会更好看.我已经使用ClickableSpan为每个单词实现了它.它工作得很好,除了我没有看到如何在播放完成后将突出显示的状态重置为正常状态.每次我点击一个新单词时,前一个单词都会丢失突出显示,而新单词会突出显示,但是一旦TTS回调,我不知道如何删除突出显示: 我的TextView: 我有一个TextVIEw来显示一段文字,我希望我的应用程序在按下时使用TTS说出单个单词.如果按下时可以突出显示单词会更好看.我已经使用ClickableSpan为每个单词实现了它.它工作得很好,除了我没有看到如何在播放完成后将突出显示的状态重置为正常状态.每次我点击一个新单词时,前一个单词都会丢失突出显示,而新单词会突出显示,但是一旦TTS回调,我不知道如何删除突出显示:

我的TextVIEw:

<TextVIEw    androID:ID="@+ID/sentence"    ...    androID:textcolorHighlight="@color/i_blue" />

要填写TextVIEw,我使用:

SpannableStringBuilder strBuilder = new SpannableStringBuilder();Iterator<Word> iterator = e.getWordList().iterator();int wordStart,wordEnd;while (iterator.hasNext()) {    Word w =  iterator.next();    wordStart = strBuilder.length() + w.getPrefix().length();    wordEnd = wordStart + w.getWord().length();    strBuilder.append(w.getPrefix() + w.getWord() + w.getSuffix());    final String currentWord = w.getWord();    ClickableSpan reaDWord = new ClickableSpan() {        private String clickeDWord = currentWord;        public voID onClick(VIEw vIEw) {            Message msg = m_HandlerReaDWord.obtainMessage();            msg.obj = clickeDWord;            m_HandlerReaDWord.sendMessage(msg);        }        @OverrIDe        public voID updateDrawState(TextPaint ds) {            super.updateDrawState(ds);            ds.setUnderlineText(false);        }    };    strBuilder.setSpan(reaDWord,wordStart,wordEnd,0);}m_SentenceVIEw.setText(strBuilder);m_SentenceVIEw.setMovementMethod(linkMovementMethod.getInstance());

而且我也有这个方法,一旦TTS在完成播放单词时回调,就会调用它:

public voID resetHighlight() { //What can I do there to reset any highlighted word?}

有没有办法可以做到?或者有比ClickableSpan更好的方法吗?

解决方法 我终于找到了一个适合我的技巧.当TextVIEw中的文本颜色发生更改时,将重置所有高亮显示.因此,如果我在TTS的回调中触发文本颜色更改,则突出显示将被删除.脏的部分是触发的颜色变化必须是不同的颜色.所以我必须在TTS回调时和ClickableSpan的onClick处理程序中更改颜色.我将这两种颜色设置为两种几乎相同的颜色.

我的ClickableSpan:

final int AlmostBlack = m_Resources.getcolor(R.color.i_black_almost);ClickableSpan reaDWord = new ClickableSpan() {    private int almostBlack = AlmostBlack;    public voID onClick(VIEw vIEw) {        TextVIEw v = (TextVIEw) vIEw;        v.setTextcolor(almostBlack);        ...

在TTS回调时的处理程序中:

m_SentenceVIEw.setTextcolor(m_Resources.getcolor(R.color.i_black));

如果你想做类似的事情而不等待TTS或任何回调,你可以使用颜色状态列表在按下或释放视图时触发颜色变化:

颜色状态列表res / color / clickable_words.xml:

<?xml version="1.0" enCoding="utf-8"?><selector xmlns:androID="http://schemas.androID.com/apk/res/androID" >    <item androID:color="@color/i_black_almost" androID:state_pressed="true"/>    <item androID:color="@color/i_black" /></selector>

TextVIEw:

<TextVIEw    androID:ID="@+ID/sentence"    ...    androID:textcolor="@color/clickable_words"    androID:textcolorlink="@color/clickable_words"    androID:textcolorHighlight="@color/i_blue" />
总结

以上是内存溢出为你收集整理的android – 按下时在文本视图中突出显示单词全部内容,希望文章能够帮你解决android – 按下时在文本视图中突出显示单词所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1126656.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存