2013-07-25 31 views
3

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

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

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

每次我尝试将颜色放在单词中的某个字母上时,该字母显示与该单词断开连接。

有没有人有解决这个问题的办法?

Android版本> 4.0

+1

发布你的代码肯定会帮助你。 –

+0

1-使用textView和Spannable String text =“بسماللهالرحمنالرحيم”; Spannable spannable = new SpannableString(text); //设置前两个字母的颜色 spannable.setSpan(new ForegroundColorSpan(Color.BLUE),0,2,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); //在TextView上设置文本\t \t TextView textTV =(TextView)v.findViewById(R.id.textTV);文本电视。的setText(spannable); ** - >字符是有颜色但未连接** – nono

+0

2 - 使用webView和HTML String text =“بسماللهالرحمنالرحيم”;在第一2个字母 字符串的html = “ ”+ +“<字体颜色= \” 红色\ “>بس +” ماللهالرحمنالرحيم “ +”“ //设置颜色; //上TextView的设置文本\t \t web视图web视图=(web视图)v.findViewById(R.id.web); web视图.loadDataWithBaseURL( “文件:/// android_asset /”,HTML,“文本/ html“,”utf-8“,null); ** - >字符有颜色但不连接** – nono

回答

0

您必须将字母更改为Unicode。

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

如果您的文字较大,则可能在Android中显示较慢。

我认为在显示大的Spannable文本时有问题。

1

感谢上帝,经过艰苦的斗争,我找到了解决办法。 使用开放源码库:

Better-Arabic-Reshaper

1:它将以Unicode的形式返回Android的文本。

2:则u应用范围的颜色是这样的:

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); 
1

乌萨马·本和丹尼尔都具有正确的想法,但他们并没有解释的很清楚了。如果您使用unicode阿拉伯字母(0x06--),则最新版本的android会在需要时自动将这些字母连接在一起,但这是在应用着色之后完成的,并且着色会断开字母之间的连接。

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