Android TextView 文字长度控制

作者: xyf_tc | 来源:发表于2017-02-22 13:34 被阅读2976次

    Android中TextView是最常用的的控件之一,主要用于文本的展示。
    文本展示中,文本长度的控制还是挺需要注意的地方,下文将就此进行一些实验和分析。

    TextView有几种控制文本长度的方法
    android:maxWidth 控制View的长度来控制文本长度
    android:maxLength 控制字符的个数来控制文本长度
    android:maxEms 控制字符的长度来控制文本长度

    以下使用简单的结构来分别进行验证
    android:maxWidth + android:maxLines

        <TextView
            android:id="@+id/text"
            android:maxWidth="50dp"
            android:textSize="14sp"
            android:ellipsize="end"
            android:maxLines="1"
            android:text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
            android:background="@color/colorAccent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    

    这是比较简单粗暴的方法,通过长度和行数的设置,直接截断输入的文本。文本的字体大小改变后,可以展示的文字个数也会随之改变。支持省略号的缩进(android:ellipsize属性)。
    PS:maxline = 1 与singleLine = true效果相同,不过魅族部分机型不支持maxLine,所以可以用singleLine更好些。

    图1

    android:maxLength

        <TextView
            android:id="@+id/text"
            android:maxLength="10"
            android:textSize="14sp"
            android:ellipsize="end"
            android:maxLines="1"
            android:text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
            android:background="@color/colorAccent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    

    maxLength用于限制输入字符的个数,先对文本进行截取,再填入控件,所以不支持省略号的缩进。使用maxLength,汉字,英文字母,标点以及空格都占一位。如下图所示,为maxLength为10的效果:


    图2
    图3

    android:maxEms

        <TextView
            android:id="@+id/text"
            android:maxEms="10"
            android:textSize="14sp"
            android:ellipsize="end"
            android:maxLines="1"
            android:text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
            android:background="@color/colorAccent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    

    maxEms支持省略号的缩进。
    Ems比较像一种单位或者权重,比如maxEms设为10时,大概可以展示20个英文字符,10个中文字符(中英文不同的标点符号权重不同,比如英文逗号可以展示将近50个,但中文逗号只能展示10个,而英文的*号可以展示20个)。但实际上也并非一一对应的,下文为maxEms的具体定义,可知其实并不好控制:

    maxEms=”10” 限制TextView的最大宽度为10个大写M的字符宽度。em是一个印刷排版的单位,表示字宽的单位。 em字面意思为:equal M(和M字符一致的宽度为一个单位)简称em。ems是em的复数表达。

    相关文章

      网友评论

      • 默默磊OK:原来魅族还有这个问题!! 之前在魅族MX4 android5.1遇到莫名的截取问题..原来是这个问题

      本文标题:Android TextView 文字长度控制

      本文链接:https://www.haomeiwen.com/subject/ywtmwttx.html