我正在使用此代码搜索字符串中的某个单词,如果找到,请更改颜色:
String x = showdata.get(SearchResults.TAG_SHOP_SECTION_ITEM_DESC);
int positions[] = new int[100];
Spannable WordtoSpan = new SpannableString(x);
int index = 0, i = 0;
while (index != -1)
{
index = x.indexOf(MainActivity.SearchWord, index);
if (index != -1)
{
WordtoSpan.setSpan(new ForegroundColorSpan(Color.RED), index,
index+MainActivity.SearchWord.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
index++;
i++;
}
}
itemDESC.setText(WordtoSpan);
代码运作完美;但是,当显示wordtospan
时,彩色字母似乎与该词的其余部分没有关联。
القدس
成为
القدس
它为第三个字母着色,但它似乎与单词的其余部分分开,但没有间距。
答案 0 :(得分:0)
使用SPAN_INCLUSIVE_EXCLUSIVE作为start is inclusive(index)。
答案 1 :(得分:0)
如果您使用unicode阿拉伯字母(0x06--),Android的最新版本会在需要时自动将字母连接在一起,但这是在应用着色后完成的,并且着色会破坏字母之间的连接。
您必须将Unicode阿拉伯字母(0x06--)转换为阿拉伯语演示文稿B(0xFE--),并在转换时自行应用连接,然后在已连接的字母上使用设置颜色
Better-Arabic-Reshaper 一个开源库,它将以Unicode的形式返回android文本,然后你可以应用span颜色。
请从我得到此答案的地方查看类似的question。