你好,游客 登录 注册 搜索
背景:
阅读新闻

Android 单个TextView中文字颜色,超链接等效果的设置

[日期:2012-02-03] 来源:Linux社区  作者:nono_love_lilith [字体: ]

一般在一个TextView中的字体颜色,效果都是统一的。

如果一段文字,前几个文字要显示高亮,中间部分一个超链接,后半部分自定义颜色。

简单点可能直接用3个textView来表示了。

因为上次做一个彩票的软件,对于双色球来说,大家都知道。

双色,那就有两种颜色。


很显然,这个效果,最后需要在一个TextView中完成。(当然也可以2个,红色和蓝色分开)。

然后我们第一反应是想到一个SpannableString这个类。

以下是网上copy过来一段代码:

[java]
  1. //创建一个 SpannableString对象     
  2.       SpannableString sp = new SpannableString("这句话中有百度超链接,有高亮显示,这样,或者这样,还有斜体.");    
  3.       //设置超链接     
  4.       sp.setSpan(new URLSpan("http://www.baidu.com"), 57,    
  5.               Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);    
  6.       //设置高亮样式一     
  7.       sp.setSpan(new BackgroundColorSpan(Color.RED), 17 ,19,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
  8.       //设置高亮样式二     
  9.       sp.setSpan(new ForegroundColorSpan(Color.YELLOW),20,24,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);      
  10.       //设置斜体     
  11.       sp.setSpan(new StyleSpan(Android.graphics.Typeface.BOLD_ITALIC), 2729, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);    
  12.       //SpannableString对象设置给TextView     
  13.       myTextView.setText(sp);    
  14.       //设置TextView可点击     
  15.       myTextView.setClickable(true);  
  16.       myTextView.setMovementMethod(LinkMovementMethod.getInstance());    

恩。一个不错的解决方式。

但是后来发现一个问题。

在对于SpannableString对象做整体操作时,我们对于里面的要设置的部分文字都是以截取方式,因此,也就是我们在构造这个

对象然后操作时,对于构造进去的String内容都是事先知道了。
那我这个开奖号码:双色球是7个数字,其他的就不一定了。而且还有一个问题,文字中我是带有空格的,
这使得在setxx对于索引起始位置定位比较困难。

后面了解了一个新方式:Html.fromHtml();
直接把文字组装成html文本。
代码:
[java]
  1.               String redNums = nums[0].replace(","" ");  
  2. String blueNums = nums[1].replace(","" ");  
  3. StringBuilder  sb = new StringBuilder();  
  4. sb.append("</font>");  
  5. sb.append("<font color='#ff00ff'>");  
  6. sb.append(redNums);  
  7. sb.append("</font>");  
  8. sb.append(" ");  
  9. sb.append("</font>");  
  10. sb.append("<font color='#0000cc'>");  
  11. sb.append(blueNums);  
  12. sb.append(" ");  
  13. sb.append("</font>");  
  14. Spanned spanned = Html.fromHtml(sb.toString());  
  15. preNumView.setText(spanned);  
效果就是上图那样的显示。

当然最后发现其实用SpannableString也能实现:
我构造两个SpannableString,一个红球,一个篮球的。
然后StringBuider组装下。适合在构造的SpannableString不是太多的情况下挺好的。

Html.fromHtml()这个api适合搞过网页开发的用户。本人没做过前端。对于几个标签都不是很熟悉。
而且适合设置大篇幅的版面文字,图片等资源。
linux
相关资讯       Android开发教程 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款