Android TextView控件

本文详细介绍Android中TextView的使用技巧,包括基本属性配置、富文本展示、样式定制、超级链接实现、行间距调整、超长文本处理及自定义字体加载。通过实例演示如何运用这些特性增强应用的用户体验。

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

1. 常用属性

TextView被用来显示文本,常用属性:

属性说明
android:text设置显示文本
android:textSize设置文字大小,推荐度量单位sp
android:textColor设置文本颜色
android:textStyle设置字形(normal/bold/italic)
android:typeface设置文本字体(normal/sans/serif/monospace)
android:singleLine设置单行显示
android:lines设置文本的行数
android:maxLines设置文本的最大显示行数
android:minLines设置文本的最小行数
android:maxLength设置显示的文本长度
android:drawableLeft在text的左边输出一个drawable
android:drawableRight在text的右边输出一个drawable
android:drawableTop在text的上边输出一个drawable
android:drawableBottom在text的下边输出一个drawable
android:drawablePadding设置text与drawable的间隔

2. 显示富文本

TextView控件显示不同颜色、大小、字体的文字。
几种常见的标签。

标签含义
font颜色和字体
big大号字
small小号字
i斜体
b粗体
tt等宽字体
br换行(行与行之间没有空行)
p换行(行与行之间的空行)
a链接地址

富文本字段,利用Html.fromHtml()进行转义。

String richText = "<font color=\"red\">红色样式</font><br />"
        + "<big>大号字样式</big><br />"
        + "<small>小号字样式</small><br />"
        + "<i>斜体样式</i><br />"
        + "<b>粗体样式</b><br />"
        + "<tt>等t宽t样式</tt><br />"
        + "<p>段落样式</p><br />"
        + "<a href=\"http://www.baidu.com\">百度一下</a>";
TextView.setText(Html.fromHtml(richText));

调用setMovementMethod(MovementMethod)方法,使得链接生效。

TextView.setMovementMethod(LinkMovementMethod.getInstance());

效果如下
这里写图片描述

3. 设置样式

SpannableString类似于String,构造对象的时候传入一个String,之后无法更改内容。SpannableStringBuilder则更像是StringBuilder,它可以通过其append(CharSequence)方法来拼接多个字符串。

使用setSpan(Object what, int start, int end, int flags)方法来设置样式。

  • Object what:对应的各种Span,继承CharacterStyle
  • int start:开始应用指定Span的位置,索引从0开始。
  • int end:结束应用指定Span的位置。
  • int flags:取值有如下四个
    • Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式
    • Spannable.SPAN_EXCLUSIVE_INCLUSIVE:前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式
    • Spannable.SPAN_INCLUSIVE_EXCLUSIVE:前面包括,后面不包括。
    • Spannable.SPAN_INCLUSIVE_INCLUSIVE:前后都包括。

使用系统提供样式来修改文本。

SpannableString ss = new SpannableString("普通文本红色字体蓝色背景");
ss.setSpan(new ForegroundColorSpan(Color.RED), 4, 8, 0);
ss.setSpan(new BackgroundColorSpan(Color.BLUE), 8, 12, 0);
tv.setText(ss);

效果如下
这里写图片描述
ForegroundColorSpanBackgroundColorSpan中,都重写了updateDrawState(TextPaint)方法,修改了TextPaint的属性。

public class ForegroundColorSpan extends CharacterStyle {

    @Override
    public void updateDrawState(TextPaint ds) {
        ds.setColor(mColor);
    }

}

public class BackgroundColorSpan extends CharacterStyle {

    @Override
    public void updateDrawState(TextPaint ds) {
        ds.bgColor = mColor;
    }

}

因此,如果我们自定义一个样式,只需要修改updateDrawState(TextPaint)方法。

SpannableString ss = new SpannableString("点击我");
ss.setSpan(new ClickableSpan() {
    @Override
    public void onClick(View widget) {
    }

    @Override
    public void updateDrawState(TextPaint ds) {
        ds.setColor(ds.linkColor);
    }
}, 0, 3, 0);
tv.setText(ss);
// 点击事件,需要setMovementMethod
tv.setMovementMethod(LinkMovementMethod.getInstance());

4. 超级链接

android:autoLink显示超级链接,

  • autoLink的值可以是webphone, map, email, all, none,分别是网络连接,电话号码提取拨号,地图地址,电子邮件,所有和默认情况(无链接)。

例如设置第一个文本的autoLink的值为web,显示为一个链接。不需要调用TextViewsetMovementMethod(MovementMethod)方法,就可点击打开网页。
这里写图片描述

5. 行间距

android:lineSpacingExtra设置行间距,android:lineSpacingMultiplier设置行间距的倍数。

下面第一个文本是正常行间距,第二个文本是10dp行间距,第三个文本是2倍行间距。第四个文本调用了setLineSpacing(float, float)方法来设置行间距。
这里写图片描述

6. 超长文本

android:ellipse属性,处理超长文本,可在文本中添加加省略号。

  • start:省略号显示在开头
  • end:省略号显示在结尾
  • middle:省略号显示在中间
  • marquee:以横向滚动方式显示(需获得当前焦点时)

下面第一个文本设置为start,第二个文本设置为middle,第三个文本设置为end。第四个文本设置为marquee,并且focusableInTouchModefocusable为设置true
这里写图片描述

7. 设置字体

字体文件"digital-7.ttf"保存在assetsfonts目录下

Typeface font = Typeface.createFromAsset(getAssets(),
        "fonts" + File.separator + "digital-7.ttf");
tv.setTypeface(font);

效果如下
这里写图片描述

相关文章
Android TextView控件
Android Span应用
Android ParagraphStyle应用
Android EditText控件
Android 监听软键盘显示和隐藏

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值