TextView displays font effects (size, color, style, hyperlink...)

Note:


—Use TextView to display strings, different sizes, different colors, special effect styles, hyperlinks...


Show results:

Font effects display



TextViewLinkActivity.java
-------------------------
...
public static final String tv = "我们渴望像安迪一样成功,却未必能付出像小曲一样的努力;我们希望能过得像小曲一样随性,却常常只能像关关一样拘束;我们想要和关关一样有大家闺秀的气质,却遇事只能像小蚯蚓一样头脑一热不管不顾;我们许愿自己能如同小蚯蚓般单纯直接,却往往都是像樊姐一样思虑过多;我们想要自己学会樊姐的善解人意,却总是更像安迪不善交往。";
 private TextView mTextView;

...

    /**
      *
      *  设置字体特效
      *
      */
      private void textviewLink() {
        String mText_1 = "安迪";
        String mText_2 = "小曲";
        String mText_3 = "关关";
        String mText_4 = "小蚯蚓";
        String mText_5 = "樊姐";
        String mText_6 = "大家闺秀";
        String mText_7 = "单纯直接";
        String mText_8 = "不管不顾";
        String mText_9 = "善解人意";
        String mText_10 = "随性";
        String mText_11 = "拘束";
        int mIndex_1 = tv.indexOf(mText_1);
        int mIndex_2 = tv.indexOf(mText_2);
        int mIndex_3 = tv.indexOf(mText_3);
        int mIndex_4 = tv.indexOf(mText_4);
        int mIndex_5 = tv.indexOf(mText_5);
        int mIndex_6 = tv.indexOf(mText_6);
        int mIndex_7 = tv.indexOf(mText_7);
        int mIndex_8 = tv.indexOf(mText_8);
        int mIndex_9 = tv.indexOf(mText_9);
        int mIndex_10 = tv.indexOf(mText_10);
        int mIndex_11 = tv.indexOf(mText_11);
        int tv_length = tv.length();

        //创建一个 SpannableString对象
        SpannableString sp = new SpannableString(tv);

        /**************************** 设置字体及大小 ************************************/
        /*** 字体 ***/
        //设置字体(default,default-bold,monospace,serif,sans-serif)
        sp.setSpan(new TypefaceSpan("sans-serif"), mIndex_1, mIndex_1 + mText_1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        /*** 1 ***/
        //设置字体大小(绝对值,单位:像素)
        sp.setSpan(new AbsoluteSizeSpan(30), mIndex_1, mIndex_1 + mText_1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        sp.setSpan(new AbsoluteSizeSpan(40), mIndex_2, mIndex_2 + mText_2.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        /*** 2 ***/
        //第二个参数boolean dip,如果为true,表示前面的字体大小单位为dip,否则为像素,同上。
        sp.setSpan(new AbsoluteSizeSpan(20, true), mIndex_3, mIndex_3 + mText_3.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        sp.setSpan(new AbsoluteSizeSpan(26, true), mIndex_4, mIndex_4 + mText_4.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        /*** 3 ***/
        //设置字体大小(相对值,单位:像素) 参数表示为默认字体大小的多少倍
        //1.5f表示默认字体大小的1.5倍
        sp.setSpan(new RelativeSizeSpan(1.5f), mIndex_5, mIndex_5 + mText_5.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        /*** 字体宽度 ***/
        //设置字体大小(相对值,单位:像素) 参数表示为默认字体宽度的多少倍
        //2.0f表示默认字体宽度的两倍,即X轴方向放大为默认字体的两倍,而高度不变
        sp.setSpan(new ScaleXSpan(2.0f), mIndex_8, mIndex_8 + mText_8.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        /**************************** 设置字体颜色 ************************************/
        /*** 前景色-洋红色 ***/
        sp.setSpan(new ForegroundColorSpan(Color.MAGENTA), mIndex_1, mIndex_1 + mText_1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        /*** 背景色-青色 ***/
        sp.setSpan(new BackgroundColorSpan(Color.CYAN), mIndex_2, mIndex_2 + mText_2.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        /**************************** 设置字体样式 ************************************/
        /*** 正常 ***/
        sp.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), mIndex_3, mIndex_3 + mText_3.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        /*** 粗体 ***/
        sp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), mIndex_4, mIndex_4 + mText_4.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        /*** 斜体 ***/
        sp.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), mIndex_5, mIndex_5 + mText_5.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        /*** 粗斜体 ***/
        sp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), mIndex_9, mIndex_9 + mText_9.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        /*** 下划线 ***/
        sp.setSpan(new UnderlineSpan(), mIndex_8, mIndex_8 + mText_8.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        /*** 删除线 ***/
        sp.setSpan(new StrikethroughSpan(), mIndex_7, mIndex_7 + mText_7.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        /*** 下标 ***/
        sp.setSpan(new SubscriptSpan(), mIndex_10, mIndex_10 + mText_10.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        /*** 上标 ***/
        sp.setSpan(new SuperscriptSpan(), mIndex_11, mIndex_11 + mText_11.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        /**************************** 设置字体超链接 ************************************/
        //超级链接(需要添加setMovementMethod方法附加响应)
        /*** 电话 ***/
        sp.setSpan(new URLSpan("tel:13166325064"), mIndex_1, mIndex_1 + mText_1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        /*** 邮件 ***/
        sp.setSpan(new URLSpan("mailto:[email protected]"), mIndex_2, mIndex_2 + mText_2.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        /*** 网络 ***/
        sp.setSpan(new URLSpan("http://blog.csdn.net/github_35033182/"), mIndex_3, mIndex_3 + mText_3.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        /*** 短信   使用sms:或者smsto: ***/
        sp.setSpan(new URLSpan("sms:13166325064"), mIndex_4, mIndex_4 + mText_4.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        /*** 彩信   使用mms:或者mmsto: ***/
        sp.setSpan(new URLSpan("mms:13166325064"), mIndex_5, mIndex_5 + mText_5.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        /*** 地图 ***/
        sp.setSpan(new URLSpan("geo:38.899533,-77.036476"), mIndex_6, mIndex_6 + mText_6.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        /**************************** 设置项目符号 ************************************/
        //第一个参数表示项目符号占用的宽度,第二个参数为项目符号的颜色
        sp.setSpan(new BulletSpan(android.text.style.BulletSpan.STANDARD_GAP_WIDTH, Color.GREEN), 0, sp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        /**************************** 设置图片 ************************************/
        //第一个参数表示项目符号占用的宽度,第二个参数为项目符号的颜色
        Drawable drawable = getResources().getDrawable(R.drawable.icon_16_09);
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        sp.setSpan(new ImageSpan(drawable), tv_length - 1, tv_length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        mTextView.setText(sp);
        //设置字体可点击
        mTextView.setMovementMethod(LinkMovementMethod.getInstance());
    }





Guess you like

Origin blog.csdn.net/github_35033182/article/details/52491664