我有一个 TextView 来显示一段文本,我希望我的应用程序在按下单个单词时使用 TTS 说出单个单词。如果按下时可以突出显示单词会更好看。我已经为每个单词使用 ClickableSpan 实现了它。它几乎可以正常工作,只是播放完成后我看不到如何将突出显示的状态重置为正常状态。每次我单击一个新单词时,前一个单词都会失去突出显示,而新单词会被突出显示,但是一旦 TTS 回调,我不知道如何删除突出显示:
我的文本视图:
<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 更好的方法?