一般在一个TextView中的字体颜色,效果都是统一的。
如果一段文字,前几个文字要显示高亮,中间部分一个超链接,后半部分自定义颜色。
简单点可能直接用3个textView来表示了。
因为上次做一个彩票的软件,对于双色球来说,大家都知道。
双色,那就有两种颜色。
很显然,这个效果,最后需要在一个TextView中完成。(当然也可以2个,红色和蓝色分开)。
然后我们第一反应是想到一个SpannableString这个类。
以下是网上copy过来一段代码:
//创建一个 SpannableString对象 SpannableString sp = new SpannableString("这句话中有百度超链接,有高亮显示,这样,或者这样,还有斜体."); //设置超链接 sp.setSpan(new URLSpan("http://www.baidu.com"), 5, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //设置高亮样式一 sp.setSpan(new BackgroundColorSpan(Color.RED), 17 ,19,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); //设置高亮样式二 sp.setSpan(new ForegroundColorSpan(Color.YELLOW),20,24,Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //设置斜体 sp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 27, 29, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //SpannableString对象设置给TextView myTextView.setText(sp); //设置TextView可点击 myTextView.setClickable(true); myTextView.setMovementMethod(LinkMovementMethod.getInstance());
恩。一个不错的解决方式。
但是后来发现一个问题。
在对于SpannableString对象做整体操作时,我们对于里面的要设置的部分文字都是以截取方式,因此,也就是我们在构造这个
String redNums = nums[0].replace(",", " "); String blueNums = nums[1].replace(",", " "); StringBuilder sb = new StringBuilder(); sb.append("</font>"); sb.append("<font color='#ff00ff'>"); sb.append(redNums); sb.append("</font>"); sb.append(" "); sb.append("</font>"); sb.append("<font color='#0000cc'>"); sb.append(blueNums); sb.append(" "); sb.append("</font>"); Spanned spanned = Html.fromHtml(sb.toString()); preNumView.setText(spanned);