android_spannableString的使用

效果图:

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);//设置点击事件没有下划线
        }
    }

}

猜你喜欢

转载自blog.csdn.net/iamchan/article/details/84098563
今日推荐