`
shuai1234
  • 浏览: 934038 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

(转摘)Android腾讯微博客户端开发六:给用户加VIP认证以及美化微博显示内容

 
阅读更多

##之间的内容是代表一个话题,@和:之间的是转发这条微博的人,也高亮显示,||代表上一次转发此微博的。url地址也高亮显示。


这个是什么组件啊?是TextView,不会吧?TextView能显示图片吗?肯定能呀。



主要是用到了SpannableString,ForegroundColorSpan,ImageSpan这3个类.

Java代码 复制代码 收藏代码
  1. String origtext = data.getString("origtext");   
  2.                     SpannableString spannable = new SpannableString(origtext);   
  3.                        
  4.                     spannable = TextUtil.decorateFaceInStr(spannable, RegexUtil.getStartAndEndIndex(origtext, Pattern.compile("\\/[\u4e00-\u9fa5a-zA-Z]{1,3}")), getResources());//解析成本地表情   
  5.                     spannable = TextUtil.decorateRefersInStr(spannable, RegexUtil.getStartAndEndIndex(origtext, Pattern.compile("@.*:")), getResources());//高亮显示微薄转发,回复者昵称  
String origtext = data.getString("origtext");
					SpannableString spannable = new SpannableString(origtext);
					
					spannable = TextUtil.decorateFaceInStr(spannable, RegexUtil.getStartAndEndIndex(origtext, Pattern.compile("\\/[\u4e00-\u9fa5a-zA-Z]{1,3}")), getResources());//解析成本地表情
					spannable = TextUtil.decorateRefersInStr(spannable, RegexUtil.getStartAndEndIndex(origtext, Pattern.compile("@.*:")), getResources());//高亮显示微薄转发,回复者昵称


Java代码 复制代码 收藏代码
  1. public static List<Map<String,Object>> getStartAndEndIndex(String sourceStr,Pattern pattern){   
  2.         List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();   
  3.         Matcher matcher = pattern.matcher(sourceStr);   
  4.         boolean isFind = matcher.find();   
  5.         while (isFind) {   
  6.             Map<String,Object> map = new HashMap<String, Object>();   
  7.             String faceName = matcher.group().substring(1,matcher.group().length());//表情名称   
  8.             map.put("startIndex",matcher.start());   
  9.             map.put("endIndex",matcher.end());   
  10.             map.put("faceName",faceName);   
  11.             list.add(map);   
  12.             isFind = matcher.find((Integer)map.get("endIndex")-1);   
  13.         }   
  14.         return list;   
  15.     }  
public static List<Map<String,Object>> getStartAndEndIndex(String sourceStr,Pattern pattern){
		List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
		Matcher matcher = pattern.matcher(sourceStr);
		boolean isFind = matcher.find();
		while (isFind) {
			Map<String,Object> map = new HashMap<String, Object>();
			String faceName = matcher.group().substring(1,matcher.group().length());//表情名称
			map.put("startIndex",matcher.start());
			map.put("endIndex",matcher.end());
			map.put("faceName",faceName);
			list.add(map);
			isFind = matcher.find((Integer)map.get("endIndex")-1);
		}
		return list;
	}

Java代码 复制代码 收藏代码
  1. public static SpannableString decorateVipInStr(SpannableString spannable,List<Map<String,Object>> list,Resources resources){   
  2.         int size = list.size();   
  3.         Drawable drawable = null;   
  4.         if(list!=null&&list.size()>0){   
  5.             for(int i=0;i<size;i++){   
  6.                 Map<String,Object> map = list.get(i);   
  7.                 drawable = resources.getDrawable(R.drawable.vip);   
  8.                 drawable.setBounds(00, drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());   
  9.                 ImageSpan span = new ImageSpan(drawable,ImageSpan.ALIGN_BASELINE);   
  10.                 spannable.setSpan(span, (Integer)map.get("startIndex"), (Integer)map.get("endIndex"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);   
  11.             }   
  12.         }   
  13.         return spannable;   
  14.     }   
  15.        
  16.     public static SpannableString decorateTopicInStr(SpannableString spannable,List<Map<String,Object>> list,Resources resources){   
  17.         int size = list.size();   
  18.         Drawable drawable = null;   
  19.         CharacterStyle foregroundColorSpan=new ForegroundColorSpan(Color.argb(2553392110));   
  20.         if(list!=null&&list.size()>0){   
  21.             for(int i=0;i<size;i++){   
  22.                 Map<String,Object> map = list.get(i);   
  23.                 spannable.setSpan(foregroundColorSpan, (Integer)map.get("startIndex"), (Integer)map.get("endIndex"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);   
  24.             }   
  25.         }   
  26.         return spannable;   
  27.     }  
public static SpannableString decorateVipInStr(SpannableString spannable,List<Map<String,Object>> list,Resources resources){
		int size = list.size();
		Drawable drawable = null;
		if(list!=null&&list.size()>0){
			for(int i=0;i<size;i++){
				Map<String,Object> map = list.get(i);
				drawable = resources.getDrawable(R.drawable.vip);
				drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
				ImageSpan span = new ImageSpan(drawable,ImageSpan.ALIGN_BASELINE);
				spannable.setSpan(span, (Integer)map.get("startIndex"), (Integer)map.get("endIndex"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
			}
		}
		return spannable;
	}
	
	public static SpannableString decorateTopicInStr(SpannableString spannable,List<Map<String,Object>> list,Resources resources){
		int size = list.size();
		Drawable drawable = null;
		CharacterStyle foregroundColorSpan=new ForegroundColorSpan(Color.argb(255, 33, 92, 110));
		if(list!=null&&list.size()>0){
			for(int i=0;i<size;i++){
				Map<String,Object> map = list.get(i);
				spannable.setSpan(foregroundColorSpan, (Integer)map.get("startIndex"), (Integer)map.get("endIndex"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
			}
		}
		return spannable;
	}


http://helloandroid.iteye.com/blog/1136290
分享到:
评论

相关推荐

    腾讯人脸api.pdf

    腾讯人脸识别多版本接口文档,需要的下载,本文只负责转摘,不做商业用途,需要的可以下载,里面涵盖腾讯人脸的多个文档,这个是我之前做的腾讯人脸项目所用到的,腾讯官方只给到在线版的,我就自己弄了个PDF

    Eclipse中用SWT和JFace开发入门-转摘 .doc

    Eclipse中用SWT和JFace开发入门-转摘 .doc

    android 布局参数中文注释说明

    android 布局参数中文注释说明 两张图片截图,仅对linerlayout 及RelativeLayout参数说明! 网络转摘!仅供学习!

    win7下自带分区图解

    有很多的朋友给自己硬盘新建分区都喜欢用第三方软件,我想原因是在XP系统下只能在安装系统时才能进行分区,一旦系统做好之后要想新建分区就必须使用三方软件才行。但到了Vista系统和现下的win7系统时,这个问题就变...

    巧用RSS技术实现博客与主页对接

    此种共享,不同于一般的内容转摘,而是在对方网站上显示来自另一方网站的文章标题和URL,访问者点击标题就直接进入来源网站进行阅读。因此对内容输出方来说,实现了同一内容多个发布平台,犹如在对方网站做文字链...

    公司控制权之争及公司股权设计模式转摘.doc

    公司控制权之争及公司股权设计模式转摘.doc

    新零售时代,小卖家如何迅速做出销量(转摘).zip

    新零售时代,小卖家如何迅速做出销量(转摘).zip

    完全平方公式变形的应用练习题_2(转摘).doc

    完全平方公式变形的应用练习题_2(转摘).doc

    新零售时代,小卖家如何迅速做出销量(转摘).doc

    新零售时代,小卖家如何迅速做出销量(转摘).doc

    新零售时代,小卖家如何迅速做出销量(转摘)-知识杂货店.doc

    新零售时代,小卖家如何迅速做出销量(转摘)-知识杂货店.doc

    网上转摘的华为笔试题目及答案

    华为从事通信网络技术与产品的研究、开发、生产与销售,是中国电信市场的主要供应商之一,并已成功进入全球电信市场。每年华为都要在各大高校招聘大批的应界生,特别是华中科技大学。  下面据说是华为公司的笔试题...

    使用PB11实现WEBSERVICE

    一、开发环境:pb11.2 8669 二、pb的webservice程序必须置于英文目录下,含中文路径时部署会出错; 三、代码只要改一个地方: n_webservice对象的of_retrieve函数中 sqlca.logpass设置为你测试数据库的sa对应密码即可 四...

    AJAX在GB2312的中文编码传输 AJAX特殊字符编码正确方法

    很多可能在转摘过程中失真或未经验证就被转摘,真正使用时却不行,也由此决定自己全方位试验一下,努力还是没有白费,虽然最终得出的结果是很简单的,但其过程对于一个新学AJAX的人来说,真是挺累。欢迎您在使用过程...

    Quest DataFactory v5.6 英文版

    DataFactory 是一种快度的,易于产生测试数据的带有直觉用户接口的工具,它能建模复杂数据关系。在当今快速的开发环境中,应用程序的测试总是处于次要地位。DataFactory是一种强的的数据产生器,它允许开发人员和QA...

    access2003.exe 单个程序文件,159mb。能正常使用。

    转摘:Microsoft Office Access(前名 Microsoft Access)是由微软发布的关联式数据库管理系统。它结合了 Microsoft Jet Database Engine 和 图形用户界面两项特点,是 Microsoft Office的成员之一。 Access能够...

    计算机科学中最重要的32个算法——转摘.docx

    这个是我从网上找到的资料,现在共享给大家,希望能帮助到大家。

    EmEditor Professional 8.01.rar

    它启动速度快,可以完全代替Windows自带的记事本,足以胜任日常的文本编辑工作,而且良好地支持Unicode和中文字符,还支持20多种编程语言的语法突出显示。此专业版,增强了程序的编辑功能,使其更适合编程人员对...

    gvim便携版 gvim绿色版完美配置

    和Emacs并列成为类Unix系统用户最喜欢的编辑器。Vim的第一个版本由Bram Moolenaar在1991年发布。最初的简称是Vi IMitation ,随着功能的不断增加,正式名称改成了Vi IMproved。现在是在开放源代码方式下发行的慈善...

    关于公司——公司成长的三个阶段,子公司和分公司.md

    本文为转摘的普及商事知识的笔记.md档,可以得到一些常识性的认知。从商业角度看,公司的最终目标无非就是赚钱,持续的赚钱,持续的赚更多的钱。为此划分了公司成长的三个阶段:产品阶段,规模扩张阶段,持续经营...

    Memcache2.8

    memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。Memcache是danga.com的一个项目,最早是...

Global site tag (gtag.js) - Google Analytics