我想在 android 视图(webview 或 textview)上显示连接和彩色阿拉伯字母。首先,我使用了没有颜色的 TextView 并且正确显示了阿拉伯语。
当我使用 spannableString 时,彩色字母与单词断开连接。
其次,我使用了带有 html 和字体标签的 WebView。我得到了同样的结果。
每次我尝试为单词中的字母添加颜色时,该字母显示与单词断开连接。
有没有人可以解决这个问题?
安卓版本>4.0
Usama 和 danial 都有正确的想法,但他们并没有解释得很清楚。如果您使用 unicode 阿拉伯字母 (0x06--),最新版本的 android 会在需要时自动将字母连接在一起,但这是在应用着色后完成的,并且着色会破坏字母之间的连接。
您必须将 unicode 阿拉伯字母 (0x06--) 转换为阿拉伯语表示 B (0xFE--),并在转换时自行应用连接,然后使用设置已连接字母的颜色。Usams 建议的库看起来像是从 unicode 阿拉伯文转换为演示 B 字符的好方法。
您必须将字母更改为 Unicode。
例如,对于 ب 使用 \ufe91,对于 س 使用 \ufeb4,然后更改颜色。
如果您的文本很大,在 Android 中显示可能会很慢。
我认为在显示大的 Spannable 文本时会出现问题。
感谢上帝,经过大量的努力,我找到了解决方案。使用开源库:
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);