Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 按下时在文本视图中突出显示单词大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个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回调时的处理程序中:

@H_887_9@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://scheR_697_11845@as.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 – 按下时在文本视图中突出显示单词所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。