特定の単語に下線を引くために a を使用してSpannableString
いますが、複数の単語がある場合、コードが最初の単語のみを強調表示することに気付きました。複数の単語を強調表示する方法が正確にわかりません:
String keyword = "test";
String text = "This is a test to underline the three test words in this test";
SpannableString output = new SpannableString(text);
if (text.indexOf(keyword) > -1)
{
int keywordIndex = text.indexOf(keyword);
int keywordLength = keyword.length();
int start = keywordIndex;
int end = keywordIndex + (keywordLength);
output.setSpan(new UnderlineSpan(), start, end, 0);
}
すべてのスペースでテキストをループしてループできると思ってsplit
いましたが、もっと良い方法があるかどうかはわかりませんでした。
正規表現を使用して複数の単語を強調表示するこのコードがありますが、正規表現は Android アプリにあり、で使用しているため、正規表現を避けようとしてListView
いますが、非常に高価であると言われています。また、このコードは単語全体のみを強調表示しているため、上記の例のテキストを使用すると、「抗議」という単語が文に含まれている場合、このコードを使用しても強調表示されません。
Matcher matcher = Pattern.compile("\\b(?:test")\\b").matcher(text);
while (matcher.find())
{
output.setSpan(new UnderlineSpan(), matcher.start(), matcher.end(), 0);
}