TextView 多文字字体颜色及多事件监听

像微信朋友圈点赞功能如:张三、李四、王五、这种格式

最早做法是在layout中创建一个父类容器如linearlayout然后在创建一个子layout,在代码中 通过for循环addView添加到父类容器当中,虽然可以实现效果但是这样无形中会增加很多view控件。

通过SpannableStringBuilder只通过一个textview就可以实现上面的效果。

InvitationLike userLike; SpannableStringBuilder builder = new SpannableStringBuilder();SpannableString spannableString;for(int i=0;i<userLikeList.size();i++){userLike=userLikeList.get(i); String strUserName="、"+userLike.getUsername();  spannableString = new SpannableString(strUserName);spannableString.setSpan(likeTextViewCliceSpan(userLike), 0, spannableString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);builder.append(spannableString);}  txtUserName.setText(builder.subSequence(1, builder.length()));txtUserName.setMovementMethod(LinkMovementMethod.getInstance());

likeTextViewCliceSpan是事件方法

private ClickableSpan likeTextViewCliceSpan(final InvitationLike user_like){ClickableSpan clickableSpan=new ClickableSpan() {@Overridepublic void onClick(View widget) {StartPace(user_like.getUtid(),user_like.getUid(),user_like.getUsername());}@Overridepublic void updateDrawState(@NonNull TextPaint ds) {super.updateDrawState(ds);//根据自己情况设置相应字体颜色ds.setColor(mContext.getResources().getColor(R.color.broadcast_list_name));ds.setUnderlineText(false);ds.clearShadowLayer();} };return clickableSpan;}

同理微信中的回复功能也一样实现通过一个textview实现,如果实用多个textview就很难保证字体对齐方式。

微信回复格式

李四回复张三:谢谢

张三:不错啊

这个样式父类必须创建一人上layout,因为有多行,每行是一个textview控件,textviewClickSpan也是事件方法和上面基本一样这里就是粘贴了

private void userCommentList(final int index,LinearLayout linearLike, final List<NewCommentModel> commentList){linearLike.removeAllViews();NewCommentModel commentModel;for(int i=0;i<commentList.size();i++){commentModel=commentList.get(i);                View view=LayoutInflater.from(mContext).inflate(R.layout.view_userlike_txtname,new LinearLayout(mContext));final CustomTextView txt_commentContent=(CustomTextView)view.findViewById(R.id.txt_username); ForegroundColorSpan replySpan = new ForegroundColorSpan(mContext.getResources().getColor(R.color.login_font));ForegroundColorSpan contentSpan = new ForegroundColorSpan(mContext.getResources().getColor(R.color.login_font));SpannableStringBuilder builder = new SpannableStringBuilder();SpannableString fromSpannable,spannableReply,toSpannable,contentSpannable;if(TextUtils.isEmpty(commentModel.getTousername())){ fromSpannable = new SpannableString(commentModel.getFromusername()+": ");fromSpannable.setSpan(textviewClickSpan(false,commentModel), 0, fromSpannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);builder.append(fromSpannable);}else{  fromSpannable = new SpannableString(commentModel.getFromusername());fromSpannable.setSpan(textviewClickSpan(false,commentModel), 0, fromSpannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);builder.append(fromSpannable);spannableReply=new SpannableString(mContext.getResources().getString(R.string.etxt_reply_hit));spannableReply.setSpan(replySpan, 0, spannableReply.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);builder.append(spannableReply);toSpannable = new SpannableString(commentModel.getTousername()+": ");toSpannable.setSpan(textviewClickSpan(true,commentModel), 0, toSpannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);builder.append(toSpannable);                }contentSpannable = new SpannableString(commentModel.getContent());contentSpannable.setSpan(contentSpan, 0, contentSpannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);builder.append(contentSpannable);txt_commentContent.setText(builder);txt_commentContent.setMovementMethod(LinkMovementMethod.getInstance());linearLike.addView(view);} }

 

转载于:https://www.cnblogs.com/freexiaoyu/p/4604027.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CA周记 - 用 Visual Studio Code 做基于 .NET MAUI 跨平台移动应用开发

自2010年以来&#xff0c;移动应用开发是非常热门的一个方向&#xff0c;从技术上我们经历了原生应用开发、基于 H5 的 Web App、混合模式的移动应用开发&#xff0c;再到跨平台移动应用开发。.NET 不仅是一个跨平台的应用&#xff0c;也是一个跨应用场景的平台。.NET的移动应用…

P2P网络穿越 NAT穿越

http://blog.csdn.net/mazidao2008/article/details/4933730 —————————————————————————————————————————————————————————————— 穿越NAT的意义&#xff1a; NAT是为了节省IP地址而设计的&#xff0c;但它隐藏了…

Eclipse之如何快速查看抽象函数实现

1、ctrl (open implementation) 2、ctrl T

页面获取Spring Security登录用户

1.在session中取得spring security的登录用户名如下&#xff1a;${session.SPRING_SECURITY_CONTEXT.authentication.principal.username} spring security 把SPRING_SECURITY_CONTEXT 放入了session 没有直接把username 放进去。下面一段代码主要描述的是session中的存的变量&…

android 骨骼动画库,cocos creator spine骨骼动画组件使用

1: 掌握sp.Skeleton组件的使用;spine骨骼动画工具1: 骨骼动画: 把动画打散, 通过工具&#xff0c;调骨骼的运动等来形成动画2: spine是一个非常流行的2D骨骼动画制作工具3: spine 动画美术人员导出3个文件:(1) .png文件:动画的”骨骼”的图片集;(2).atlas文件: 每个骨骼在图片集…

border:none 与border:0的区别

border:none与border:0的区别体现为两点&#xff1a;一是理论上的性能差异&#xff0c;二是浏览器兼容性的差异。 性能差异&#xff1a; 【border:0;】把border设为“0”像素效果等于border-width:0&#xff0c;浏览器依然对border-width、border-color进行了渲染&#xff0c;即…

C#导入导出.CSV文件

欢迎您成为我的读者&#xff0c;希望这篇文章能给你一些帮助。前言大家好&#xff0c;我是阿辉。今天和大家一起来看看&#xff0c;C#在处理流文件时,我们最常用的导出Excel文件是如何操作的。在日常的业务编码过程中&#xff0c;很多时候需求就要求导出Office能打开的表格文件…

LeetCode之Sum of Left Leaves

1、题目 Find the sum of all left leaves in a given binary tree. Example: 3/ \9 20/ \15 7There are two left leaves in the binary tree, with values 9 and 15 respectively. Return 24.Subscribe to see which companies asked this question. 2、代码实现 /*** De…

华为电视鸿蒙系统好用吗,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼鸿蒙的厉害在于 你可能非用不可&#xfffc;瀑布先生06-05 09:52科技达人关注&#xfffc;华为一直在研发一套操作系统&#xff0c;如果不是对手打压。可能大部分人&#xff0c;至今都不知道这个系统的存在。如果市场稳定&#xff…

移动开发总结

meta基础知识 H5页面窗口自动调整到设备宽度&#xff0c;并禁止用户缩放页面 <meta name"viewport" content"widthdevice-width,initial-scale1.0,minimum-scale1.0,maximum-scale1.0,user-scalableno" /> 忽略将页面中的数字识别为电话号码 <met…

奋斗逼,真牛逼!

▲点击上方第二个findyi关注&#xff0c;回复“1”领取职场资料职场&认知洞察 丨 作者 / 易洋 这是findyi公众号的第304篇原创文章今天下午一个读者咨询我一个问题&#xff1a;这名读者感觉卷不过身边的加班狂人&#xff0c;但又感觉这些人丝毫不给公司创造价值&#xff0…

Entity Framework 批量插入

为什么80%的码农都做不了架构师&#xff1f;>>> 奋斗的小鸟——dogxuefeng Entity Framework 批量插入很慢 Entity Framework 批量插入很慢吗&#xff1f;我自己测试下 前几天看到一篇文章里提到过&#xff0c;在批量插入时&#xff0c;需要加上Context.Configur…

MYSQL分页limit速度太慢优化方法

当一个表数据有几百万的数据时&#xff0c;分页的时候成了问题如 select * from table limit 0,10 这个没有问题 当 limit 200000,10 的时候数据读取就很慢&#xff0c;可以按照一下方法解决最近一个网站的服务器评论被人刷死&#xff0c;导致mysql数据库异常发生too many open…

数据结构之求二叉树的所有叶子和以及叶子总数

1、题目 数据结构之求二叉树的所有叶子和以及叶子总数 2、代码实现 tree.java package leetcode.chenyu.test;public class Tree {int val;Tree left;Tree right;Tree(int val) {this.val = val;} } package leetcode.chenyu.test;public class TreeTest {public stat…

华为手机Android系统优缺点,第一次安卓机优缺点总结(对比iOS系统)

这次老婆换了x,换下来的7我都没用到&#xff0c;被丈母娘用了&#xff0c;我看着手上的6p&#xff0c;狠心换了华为Mate10Pro(6g,64g)。其实在一年前就开始关注华为的手机&#xff0c;对齐的性能了解主要来自网络媒体&#xff0c;外观认识主要来自身边朋友。从iOS转变到安卓&am…

DEV-aspxgridview中的aspcheckbox

checkbox可以所以点击修改 例子演示&#xff1a;http://codecentral.devexpress.com/E2313/ 源程序&#xff1a;https://www.devexpress.com/Support/Center/Example/Details/E2313 表头可以全选所有的checkbook 具体演示如下&#xff1a;http://codecentral.devexpress.com/…

HDS业务定义永续IT架构

永续IT架构的出现并不是以取代原有设备为目的&#xff0c;而是帮助用户循序渐进地向新一代IT架构迁移。在HDS的手中&#xff0c;软件定义存储、对象存储等都成了保障业务永远在线的利器。技术创新固然可喜&#xff0c;但是最先进的技术不一定能直接带来企业收入的增加&#xff…

FreeBSD大败局

文 | 肖滢&lola策划 | lola出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09;看过上一篇文章《还有人记得 Linux 之前&#xff0c;那个理想又骄傲的 BSD 吗&#xff1f;》的读者都知道&#xff0c; BSD 是 Unix 最重要的一个开源分支&#xff0c;这一本…

java文字特效

立体效果的文字 主要使用了Graphics类中的setFont和setColor的方法&#xff0c;绘制多层字然后加上平移一个坐标即可实现多重叠加的效果,让人看起来就像是立体一样,详情请见源码 阴影效果的文字 和面一样&#xff0c;只是平移的方式有些不同&#xff0c;详情请见源码 倾斜效果的…

Android之如何判断设备是平板还是手机

1、判断方法 public static boolean isTablet(Context context) {return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) > Configuration.SCREENLAYOUT_SIZE_LARGE;} 2、layout-port 和layout-land区别 layout-po…