4

我想在 android 视图(webview 或 textview)上显示连接彩色阿拉伯字母。首先,我使用了没有颜色的 TextView 并且正确显示了阿拉伯语。

当我使用 spannableString 时,彩色字母与单词断开连接。

其次,我使用了带有 html 和字体标签的 WebView。我得到了同样的结果。

每次我尝试为单词中的字母添加颜色时,该字母显示与单词断开连接。

有没有人可以解决这个问题?

安卓版本>4.0

4

3 回答 3

2

Usama 和 danial 都有正确的想法,但他们并没有解释得很清楚。如果您使用 unicode 阿拉伯字母 (0x06--),最新版本的 android 会在需要时自动将字母连接在一起,但这是在应用着色后完成的,并且着色会破坏字母之间的连接。

您必须将 unicode 阿拉伯字母 (0x06--) 转换为阿拉伯语表示 B (0xFE--),并在转换时自行应用连接,然后使用设置已连接字母的颜色。Usams 建议的库看起来像是从 unicode 阿拉伯文转换为演示 B 字符的好方法。

于 2015-10-17T17:30:29.373 回答
1

您必须将字母更改为 Unicode。

例如,对于 ب 使用 \ufe91,对于 س 使用 \ufeb4,然后更改颜色。

如果您的文本很大,在 Android 中显示可能会很慢。

我认为在显示大的 Spannable 文本时会出现问题。

于 2013-12-18T07:15:34.197 回答
1

感谢上帝,经过大量的努力,我找到了解决方案。使用开源库:

Better-Arabic-Reshaper

1:它将以unicode的形式返回android文本。

2:然后你像这样应用跨度颜色:

    final SpannableStringBuilder ssb = new SpannableStringBuilder();
    final int flag = Spannable.SPAN_EXCLUSIVE_EXCLUSIVE;

    //converting arabic text to unicode chars
    String dd=ArabicUtilities.reshape("بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ");
    ssb.append(dd);
    //applying colors
    ssb.setSpan(new ForegroundColorSpan(Color.RED), 0, 1, flag);
    ssb.setSpan(new ForegroundColorSpan(Color.RED), 1, 2, flag);
    ssb.setSpan(new ForegroundColorSpan(Color.GREEN), 2, 3, flag);
    ssb.setSpan(new ForegroundColorSpan(Color.BLUE), 3, 4, flag);
    //seting formated spanned text
    textview.setText(ssb);
于 2015-06-27T08:10:30.947 回答