基础控件——TextView实现部分文字可点击
来源:互联网 发布:java json传值到前台 编辑:程序博客网 时间:2024/06/01 16:31
本次来讲解一下SpannableString和SpannableStringBuilder实现定制文本。
直接上代码
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView t1 = (TextView) findViewById(R.id.txtOne); SpannableString span = new SpannableString("红色打电话斜体删除线绿色下划线图片:."); //1.设置背景色,setSpan时需要指定的flag,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括) span.setSpan(new ForegroundColorSpan(Color.RED), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //2.用超链接标记文本 span.setSpan(new URLSpan("tel:4155551212"), 2, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //3.用样式标记文本(斜体) span.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 5, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //4.用删除线标记文本 span.setSpan(new StrikethroughSpan(), 7, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //5.用下划线标记文本 span.setSpan(new UnderlineSpan(), 10, 16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //6.用颜色标记 span.setSpan(new ForegroundColorSpan(Color.GREEN), 10, 13,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //7.//获取Drawable资源 Drawable d = getResources().getDrawable(R.drawable.icon); d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); //8.创建ImageSpan,然后用ImageSpan来替换文本 ImageSpan imgspan = new ImageSpan(d, ImageSpan.ALIGN_BASELINE); span.setSpan(imgspan, 18, 19, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); t1.setText(span); }}
效果图:
上面就是定制文本的常用基本属性,可以根据自己需要来使用。
下面在写一个模拟朋友圈点赞人数的Demo,先上代码
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView t1 = (TextView) findViewById(R.id.txtOne); //模拟点赞人数 StringBuilder sb = new StringBuilder(); for (int i = 0; i < 20; i++) { sb.append("好友" + i + ","); } //以逗号分开可点击文字 String likeUsers = sb.substring(0, sb.lastIndexOf(",")).toString(); t1.setMovementMethod(LinkMovementMethod.getInstance()); t1.setText(addClickPart(likeUsers), TextView.BufferType.SPANNABLE); } //定义一个点击每个部分文字的处理方法 private SpannableStringBuilder addClickPart(String str) { //赞的图标,这里没有素材,就找个笑脸代替下~ ImageSpan imgspan = new ImageSpan(MainActivity.this, R.drawable.ic_widget_face); SpannableString spanStr = new SpannableString("p."); spanStr.setSpan(imgspan, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); //创建一个SpannableStringBuilder对象,连接多个字符串 SpannableStringBuilder ssb = new SpannableStringBuilder(spanStr); ssb.append(str); String[] likeUsers = str.split(","); if (likeUsers.length > 0) { for (int i = 0; i < likeUsers.length; i++) { final String name = likeUsers[i]; final int start = str.indexOf(name) + spanStr.length(); ssb.setSpan(new ClickableSpan() { @Override public void onClick(View widget) { //Toast被点击的名字,这里实现具体的逻辑,比如跳转至被点击人的主页 Toast.makeText(MainActivity.this, name, Toast.LENGTH_SHORT).show(); } @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); //删除下划线,设置字体颜色为蓝色 ds.setColor(Color.BLUE); ds.setUnderlineText(false); } },start,start + name.length(),0); } } return ssb.append("等" + likeUsers.length + "个人觉得很赞"); }}
逻辑方面没什么难度,大家根据代码注释就能明白,主要了解下SpannableString和SpannableStringBuilder方法的基本使用。
阅读全文
1 0
- 基础控件——TextView实现部分文字可点击
- TextView部分文字可点击
- TextView技巧,例如:实现部分文字变色和可点击
- Android TextView部分文字实现点击事件
- android textview 部分文字加颜色并可点击
- TextView设置部分文字可点击及样式
- TextView高级应用之:实现部分文字点击事件
- TextView部分文字变色、可点击。(微博话题 变色、点击)
- [Widget]MultiActionTextView-文字可点击TextView
- EditText,TextView部分文字点击事件响应
- TextView中的部分文字响应点击事件
- android textview 部分文字点击事件
- TextView设部分文字的点击事件
- TextView自定义省略号、部分文字变色、部分文字点击
- TextView中的部分文字自定义颜色和点击事件(类似新浪微博带颜色的可点击字体)
- 使用SpannableString,ClickableSpan,文字部分可点击
- TextView实现点击部分文字跳转,实现微信朋友圈评论Item的显示效果
- 名词解释功能:TextView 给部分文字加下划线并实现点击事件
- 剑指offer_数组中的重复数字
- Mac 安装Tomcat
- Python code 提取UML
- 设计模式思维导图
- 刘书学习笔记(2)DAG上dp(下)
- 基础控件——TextView实现部分文字可点击
- mysql测试where子句中使用or关键字能否用到索引
- 排序-归并
- JSP语法笔记
- POJ1163 The Triangle&&POJ3176 Cow Bowling
- HDU 4973 A simple simulation problem. 线段树
- OJ 2510: 存钱
- 进程管理命令
- 基于RESTful API的TCC补偿模式 分布式事务