效果图:
layout:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_pic_text" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.iamchan.allfunction.ui.program.PicTextActivity"> <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
java:
public class PicTextActivity extends SwipeBackActivity{ @BindView(R.id.text) TextView text; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pic_text); ButterKnife.bind(this); /* * * spannableString 与 String的区别 (都是一种字符串类型) * string比较单一 * spannableString 可以改变文字的样式什么的 * * * */ SpannableString spannableString=new SpannableString("这是spannable哈哈"); /* * RelativeSizeSpan size = new RelativeSizeSpan(1.2f);//设置文字大小 * StrikethroughSpan strikethroughSpan = new StrikethroughSpan();//删除线 * UnderlineSpan underlineSpan = new UnderlineSpan();//下划线 * SuperscriptSpan superscriptSpan = new SuperscriptSpan();//设置文字上标 * SubscriptSpan subscriptSpan = new SubscriptSpan();//设置文字下标 * StyleSpan styleSpanB = new StyleSpan(Typeface.BOLD);//粗体 * StyleSpan styleSpanI = new StyleSpan(Typeface.ITALIC);//斜体 * * 设置图片 * Drawable drawable = ContextCompat.getDrawable(this,R.mipmap.iamchan); * drawable.setBounds(0, 0, 42, 42);//大小 * ImageSpan imageSpan = new ImageSpan(drawable); * * */ BackgroundColorSpan color = new BackgroundColorSpan(ContextCompat.getColor(this,R.color.blue)); /*第一个参数设置颜色 第二个和第三个属于文字的区间 从0字符(起始下标)到5字符(终止下标) 第四个参数属于 SpannableString.SPAN_INCLUSIVE_EXCLUSIVE 从起始下标到终止下标,包括起始下标 inclusive包括起始下标 exclusive 不包括终止下标的意思 SpannableString.SPAN_INCLUSIVE_INCLUSIVE 从起始下标到终止下标,同时包括起始下标和终止下标 SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE 从起始下标到终止下标,但都不包括起始下标和终止下标 SpannableString.SPAN_EXCLUSIVE_INCLUSIVE 从起始下标到终止下标,包括终止下标*/ /* SpannableStringBuilder build=new SpannableStringBuilder(); build.append("aaaaaaaaa");*/ Drawable drawable = ContextCompat.getDrawable(this,R.mipmap.iamchan); /*drawable.setBounds(0, 0, 120, 120);*///大小 drawable.setBounds(0,0,drawable.getMinimumWidth(),drawable.getMinimumHeight()); ImageSpan imageSpan = new ImageSpan(drawable); MyClickSpan clickSpan = new MyClickSpan();//实现监听事件 URLSpan urlSpan=new URLSpan("https://blog.csdn.net/iamchan");//也可以实现监听网址事件 spannableString.setSpan(color,0,5,SpannableString.SPAN_INCLUSIVE_INCLUSIVE); spannableString.setSpan(imageSpan,0,1,SpannableString.SPAN_INCLUSIVE_INCLUSIVE); spannableString.setSpan(clickSpan,2,8,SpannableString.SPAN_INCLUSIVE_INCLUSIVE); spannableString.setSpan(urlSpan,9,spannableString.length(),SpannableString.SPAN_INCLUSIVE_INCLUSIVE); text.setMovementMethod(LinkMovementMethod.getInstance());//需要实现这个方法才能实现点击事件 text.setHighlightColor(ContextCompat.getColor(this,R.color.white));//可以修改点击之后的背景色 text.setText(spannableString); } //监听事件 public class MyClickSpan extends ClickableSpan{ @Override public void onClick(View widget) { Toast.makeText(PicTextActivity.this, "点击事件", Toast.LENGTH_SHORT).show(); } @Override public void updateDrawState(TextPaint ds) {//修改绘制的状态 ds.setUnderlineText(false);//设置点击事件没有下划线 } }
}