字符串在阿拉伯语中显示单独的字母

时间:2014-04-16 14:19:27

标签: java android textview arabic textcolor

我正在使用此代码搜索字符串中的某个单词,如果找到,请更改颜色:

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时,彩色字母似乎与该词的其余部分没有关联。

实施例

  

القدس

成为

  

القدس

它为第三个字母着色,但它似乎与单词的其余部分分开,但没有间距。

2 个答案:

答案 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