基础控件——TextView实现部分文字可点击
2017-09-04 22:14
323 查看
本次来讲解一下SpannableString和SpannableStringBuilder实现定制文本。
直接上代码
效果图:
上面就是定制文本的常用基本属性,可以根据自己需要来使用。
下面在写一个模拟朋友圈点赞人数的Demo,先上代码
逻辑方面没什么难度,大家根据代码注释就能明白,主要了解下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 + na 8f1c me.length(),0); } } return ssb.append("等" + likeUsers.length + "个人觉得很赞"); } }
逻辑方面没什么难度,大家根据代码注释就能明白,主要了解下SpannableString和SpannableStringBuilder方法的基本使用。
相关文章推荐
- 浅谈ClickableSpan , 实现TextView文本某一部分文字的点击响应
- android 实现textview部分文字点击效果,类似于微博的话题丶用户
- 浅谈ClickableSpan , 实现TextView文本某一部分文字的点击响应
- android Textview 实现展开收缩功能+部分文字点击 (SpannableString)
- Android中TextView实现部分文字可点击跳转
- clickableSpan实现textView文字部分点击有响应
- Android TextView部分文字实现点击事件
- 浅谈ClickableSpan , 实现TextView文本某一部分文字的点击响应
- TextView技巧,例如:实现部分文字变色和可点击
- TextView 部分文字高亮、点击、添加超链接、替换字体、富文本、图片替换文字等实现
- 名词解释功能:TextView 给部分文字加下划线并实现点击事件
- 名词解释功能:TextView 给部分文字加下划线并实现点击事件
- Android之TextView实现文字过长时省略部分或者滚动显示
- Android TextView 嵌套图片及其点击,TextView 部分文字点击,文字多颜色
- Android 关于TextView中,设置指定部分文字改变颜色,和指定部分文字点击事件
- android textview 部分文字加颜色并可点击
- Android通过SpannableString实现超级链接 点击textview某些文字跳转
- TextView设部分文字的点击事件
- Android TextView控件文字添加下划线的实现方法
- Android UI设计之<六>使用HTML标签,实现在TextView中对部分文字进行加粗显示