テキストの段落を表示する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よりも優れたアプローチはありますか?