Android,如何限制TextView的宽度(并在文本末尾添加三个点)?

Hes*_*sam 285 android ellipsis textview

我有一个TextView我想限制它的字符.实际上,我可以做到这一点,但我正在寻找的是如何在字符串的末尾添加三个点(...).这一个显示文本已经继续.这是我的XML,但没有点,虽然它限制了我的文本.

<TextView 
        android:id                      = "@+id/tvFixture"
        android:layout_width            = "wrap_content"
        android:layout_height           = "wrap_content"
        android:layout_toLeftOf         = "@id/ivFixture_Guest"
        android:text                    = "@string/test_06"
        android:lines                   = "1"
        android:ems                     = "3"
        android:gravity                 = "right"
        style                           = "@style/simpletopic.black" 
        android:ellipsize="end"/>
Run Code Online (Sandbox Code Playgroud)

Moh*_*ikh 624

推荐使用:

android:singleLine="true"在Textview中添加一个属性

更新:

android:ellipsize="end" 
android:maxLines="1"
Run Code Online (Sandbox Code Playgroud)

  • android:singleLine ="true"已被弃用且副作用不好.使用android:ellipsize ="end"和maxLine ="1"代替 (39认同)
  • 当我尝试这个时,绝对需要singleLine.即使它说弃用了. (3认同)
  • 顺便说一句,如果你愿意的话,android:maxLines 可以大于 1:) (3认同)
  • 使用`singleLine`有哪些“不良副作用”?另请参阅:[Android 中 xml 属性 singleLine 是否已弃用?](/sf/ask/2102008821/) (2认同)

Sur*_*gch 148

以下是我通过使用各种选项强制TextView一行(有和没有三个点)学到的东西.

在此输入图像描述

机器人:MAXLINES = "1"

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:text="one two three four five six seven eight nine ten" />
Run Code Online (Sandbox Code Playgroud)

这只会强制文本到一行.隐藏任何额外的文字.

有关:

ellipsize = "端"

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:ellipsize="end"
    android:text="one two three four five six seven eight nine ten" />
Run Code Online (Sandbox Code Playgroud)

这会切断不适合的文本,但让用户知道通过添加省略号(三个点)来截断文本.

有关:

ellipsize = "字幕"

<TextView
    android:id="@+id/MarqueeText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:text="one two three four five six seven eight nine ten" />
Run Code Online (Sandbox Code Playgroud)

这使文本在TextView中自动滚动.请注意,有时需要在代码中设置:

textView.setSelected(true);
Run Code Online (Sandbox Code Playgroud)

据说android:maxLines="1"并且android:singleLine="true"应该基本上做同样的事情,因为singleLine 显然已弃用,我宁愿不使用它,但是当我拿出它时,选框不再滚动了.以maxLines出并不影响它,但.

有关:

使用scrollHorizo​​ntally进行Horizo​​ntalScrollView

<HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/horizontalScrollView">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxLines="1"
        android:scrollHorizontally="true"
        android:text="one two three four five six seven eight nine ten" />
</HorizontalScrollView>
Run Code Online (Sandbox Code Playgroud)

这允许用户手动滚动以查看整行文本.


Nir*_*tel 79

在布局文件中尝试TextView的这个属性..

android:ellipsize="end"
android:maxLines="1"
Run Code Online (Sandbox Code Playgroud)


Muz*_*Muz 31

我认为你想要将宽度限制为一行而不是按字符限制它?由于singleLine不推荐使用,您可以尝试一起使用以下内容:

android:maxLines="1"
android:scrollHorizontally="true"
android:ellipsize="end"
Run Code Online (Sandbox Code Playgroud)


Nay*_*pte 12

例如.您可以使用

android:maxLength="13"
Run Code Online (Sandbox Code Playgroud)

这会将texview长度限制为13,但问题是如果你试图添加3个点(...),它就不会显示它,因为它将是textview长度的一部分.

     String userName;
     if (data.length() >= 13) {
            userName = data.substring(0, 13)+ "...";

     } else {

            userName = data;

    }
        textView.setText(userName);
Run Code Online (Sandbox Code Playgroud)

除此之外,你必须使用

 android:maxLines="1"
Run Code Online (Sandbox Code Playgroud)

  • 你最好使用 "\u2026" 而不是 "..." (2认同)
  • 不.我个人最近了解到Unicode中存在这个字符,并决定分享这些知识;) (2认同)

小智 10

  • android:singleLine="true"
  • android:maxLines="1"
  • app:layout_constrainedWidth="true"

这就是我的完整TextView外观:

    <TextView
    android:id="@+id/message_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="5dp"
    android:maxLines="1"
    android:singleLine="true"
    android:text="NAME PLACEHOLDER MORE Text"
    android:textColor="@android:color/black"
    android:textSize="16sp"

    android:textStyle="bold"
    app:layout_constrainedWidth="true"
    app:layout_constraintEnd_toStartOf="@id/message_check_sign"
    app:layout_constraintHorizontal_bias="0"
    app:layout_constraintStart_toEndOf="@id/img_chat_contact"
    app:layout_constraintTop_toTopOf="@id/img_chat_contact" />
Run Code Online (Sandbox Code Playgroud)

<code>TextView</code> 的图片


小智 8

如果文本太长,则在文本末尾添加“...”的步骤:

  1. 检查文本宽度是否恒定
  2. 添加这两行 android:ellipsize="end" android:maxLines="1"

约束布局中textview的完整代码:

<TextView
        android:layout_width="75dp"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:maxLines="1"
        android:textSize="15sp"
        android:textAllCaps="false"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="parent" />
Run Code Online (Sandbox Code Playgroud)


Var*_*kar 6

我正在使用水平 Recyclerview。
1) 在 CardView 中,TextView 在使用时会垂直扭曲

android:ellipsize="end"
android:maxLines="1"
Run Code Online (Sandbox Code Playgroud)

检查粗体 TextViews Wyman Group, Jaskolski ... 在此处输入图片说明

2)但是当我将 singleLine 与 ellipsize 一起使用时 -

android:ellipsize="end"
android:singleLine="true"
Run Code Online (Sandbox Code Playgroud)

检查粗体 TextViews Wyman Group, Jaskolski ... 在此处输入图片说明

第二个解决方案对我有用(使用 singleLine)。此外,我在 OS 版本:4.1 及更高版本(直到 8.0)中进行了测试,它运行良好,没有任何崩溃。


rui*_*936 5

代码:

TextView your_text_view = (TextView) findViewById(R.id.your_id_textview);
your_text_view.setEllipsize(TextUtils.TruncateAt.END);
Run Code Online (Sandbox Code Playgroud)

xml:

android:maxLines = "5"
Run Code Online (Sandbox Code Playgroud)

例如

在马太福音 13 章,门徒问耶稣为什么用比喻对群众说话。他回答说:“天国的奥秘,只叫你们知道,不叫他们知道。

输出:在马太福音 13 章,门徒问耶稣为什么用比喻对群众说话。他回答说:“你已经知道了......