Android之TextView

本文详细介绍了Android中TextView的使用,包括如何实现超链接,通过xml属性autoLink和HTML语言,以及使用SpannableString来创建。此外,还探讨了TextView的图文混排技巧,如设置drawableLeft等属性,以及使用HTML和SpannableString实现复杂样式。最后,提到了设置TextView的最大显示字数的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android之TextView

1、实现超链接

  • 直接在xml文件中配置autoLink属性
    autoLink属性一共有六个值,分别是none(正常),web(将文本识别为一个网址),phone(将文本识别为一个电话号码),mail(将文本识别为一个邮件地址),map(打开地图应用),all(根据文本自动识别)。一般情况下我们设置为all即可
 <TextView
        android:id="@+id/textView4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:autoLink="phone"
        android:text="10086"
        android:textColor="@color/colorPrimary"
        android:textSize="20sp" />
  • 使用HTML语言
    textView4.setText(Html.fromHtml("<a href='tel:10086'>打电话</a>," +
    "<a href='smsto:10086'>发短信</a>," +
    "<a href='mailto:584991843@qq.com'>发邮件</a>," +
    "<a href='http://www.baidu.com'>Go百度</a>"));
    textView4.setMovementMethod(LinkMovementMethod.getInstance());
  • 使用SpannableString实现超链接(见下文图文混排)

2、TextView图文混排

  • 直接设置属性drawableLeft等
  • 使用HTML
  • 使用SpannableString
    效果图
SpannableString spannableString = new SpannableString("绿色打电话斜体删除线下划线图片:.点我背景颜色大字5模糊浮雕伸缩");
        //设置字体颜色
        spannableString.setSpan(new ForegroundColorSpan(Color.GREEN), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置字体背景颜色
        spannableString.setSpan(new BackgroundColorSpan(Color.GREEN), 19, 23, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置字体大小
        spannableString.setSpan(new RelativeSizeSpan(2.0f), 23, 25, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置字体上下标(上标:SuperscriptSpan,下标:SubscriptSpan)
        spannableString.setSpan(new SuperscriptSpan(), 25, 26, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置字体上标为小字体
        spannableString.setSpan(new RelativeSizeSpan(0.5f), 25, 26, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置字体模糊---模糊模式(向内部模糊--blur.inner, 向外部模糊实心:blur.solid, 向外部模糊空心:blur.outer,正常模糊:blur.normal)
        spannableString.setSpan(new MaskFilterSpan(new BlurMaskFilter(5.0f, BlurMaskFilter.Blur.NORMAL)), 26, 28, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置字体浮雕(好像无效)-direction是float数组,定义长度为3的数组标量[x,y,z],来指定光源的方向
        //ambient 取值在01之间,定义背景光 或者说是周围光
        //specular 定义镜面反射系数。
        //blurRadius 模糊半径。
        spannableString.setSpan(new EmbossMaskFilter(new float[]{10, 10, 10}, 0.1f, 5.0f, 5.0f), 28, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //基于X轴字体伸缩
        spannableString.setSpan(new ScaleXSpan(2.0f), 30, 32, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置超链接(打电话)
        //打开百度:"http://www.baidu.com",发短信:"smsto:18565554482",发邮件:"mailto:584991843@qq.com",
        spannableString.setSpan(new URLSpan("tel:10086"), 2, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //用样式标记文本(斜体加粗)
        spannableString.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 5, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //用杀删除线标记文本
        spannableString.setSpan(new StrikethroughSpan(), 7, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //用下划线标记文本
        spannableString.setSpan(new UnderlineSpan(), 10, 14, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //获取drawable
        Drawable drawable = getResources().getDrawable(R.mipmap.ic_launcher);
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        //创建imagespan
        ImageSpan imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
        //用imagespan替换文本
        spannableString.setSpan(imageSpan, 16, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //部分文字点击事件
        spannableString.setSpan(new ClickableSpan() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "点我", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void updateDrawState(TextPaint ds) {
                super.updateDrawState(ds);
                ds.setColor(Color.BLUE);//设置颜色
                ds.setUnderlineText(false);//去掉下划线
            }
        }, 17, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        //点击图片
        spannableString.setSpan(new ClickableSpan() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "我是一张图片", Toast.LENGTH_SHORT).show();
            }
        }, 16, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        textView3.setText(spannableString);
        textView3.setHighlightColor(Color.TRANSPARENT);//消除点击时的背景色
        //实现文本的滚动
        textView3.setMovementMethod(LinkMovementMethod.getInstance());

SpannableString简介
SpannableString其实和String一样,都是一种字符串类型,同样TextView也可以直接设置SpannableString作为显示文本,不同的是SpannableString可以通过使用其方法setSpan方法实现字符串各种形式风格的显示,重要的是可以指定设置的区间,也就是为字符串指定下标区间内的子字符串设置格式。
setSpan(Object what, int start, int end, int flags)方法需要用户输入四个参数,what表示设置的格式是什么,可以是前景色、背景色也可以是可点击的文本等等,start表示需要设置格式的子字符串的起始下标,同理end表示终了下标,flags属性就有意思了,共有四种属性:
Spanned.SPAN_INCLUSIVE_EXCLUSIVE 从起始下标到终了下标,包括起始下标
Spanned.SPAN_INCLUSIVE_INCLUSIVE 从起始下标到终了下标,同时包括起始下标和终了下标
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 从起始下标到终了下标,但都不包括起始下标和终了下标
Spanned.SPAN_EXCLUSIVE_INCLUSIVE 从起始下标到终了下标,包括终了下标

关于StringSpannable的一个参考:https://www.jianshu.com/p/509b0d2626f4

3、设置最大字数

代码中:

textView.setFilters(new InputFilter[] { new InputFilter.LengthFilter(12) });

布局中

maxlength
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值