368

我有一个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"/>
4

24 回答 24

800

已弃用:

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

更新:

android:ellipsize="end" 
android:maxLines="1"
于 2012-05-25T05:19:05.667 回答
179

TextView以下是我通过尝试将 a 强制为单行(有和没有三个点)的各种选项而学到的。

在此处输入图像描述

安卓:m​​axLines="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" />

这只是将文本强制为一行。任何额外的文本都被隐藏。

有关的:

椭圆形=“结束”

<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" />

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

有关的:

椭圆尺寸=“选框”

<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" />

这使得文本在 TextView 上自动滚动。请注意,有时需要在代码中进行设置:

textView.setSelected(true);

假设android:maxLines="1"并且android:singleLine="true"应该做基本相同的事情,并且由于 singleLine显然已被弃用,我宁愿不使用它,但是当我把它拿出来时,选框不再滚动了。不过maxLines,取出并不影响它。

有关的:

Horizo​​ntalScrollView 与 scrollHorizo​​ntally

<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>

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

于 2015-05-04T12:05:19.270 回答
87

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

android:ellipsize="end"
android:maxLines="1"
于 2012-05-25T05:20:16.010 回答
32

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

android:maxLines="1"
android:scrollHorizontally="true"
android:ellipsize="end"
于 2012-11-06T10:46:55.253 回答
15

例如。您可以使用

android:maxLength="13"

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

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

     } else {

            userName = data;

    }
        textView.setText(userName);

除此之外,您必须使用

 android:maxLines="1"
于 2013-05-16T06:24:42.810 回答
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" />

<code>TextView</code>的图片

于 2018-08-29T22:23:23.897 回答
6

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

android:ellipsize="end"
android:maxLines="1"

检查粗体 TextViews Wyman Group, Jaskolski... 在此处输入图像描述

2)但是当我使用 singleLine 和 ellipsize -

android:ellipsize="end"
android:singleLine="true"

检查粗体 TextViews Wyman Group, Jaskolski... 在此处输入图像描述

第二个解决方案对我很有效(使用 singleLine)。我还测试了操作系统版本:4.1 及更高版本(直到 8.0),它工作正常,没有任何崩溃。

于 2018-01-18T11:05:24.620 回答
5

代码:

TextView your_text_view = (TextView) findViewById(R.id.your_id_textview);
your_text_view.setEllipsize(TextUtils.TruncateAt.END);

xml:

android:maxLines = "5"

例如

在马太福音第 13 章,门徒问耶稣为什么用比喻对群众说话。他回答说:“天国的奥秘,曾赐给你们知道,但没有赐给他们。

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

于 2013-11-04T01:36:39.077 回答
4

您可以限制 textview 的字符数并在文本后添加 (...)。假设您只需要显示 5 个字母,然后您需要显示 (...),只需执行以下操作:

String YourString = "abcdefghijk";

if(YourString.length()>5){

YourString  =  YourString.substring(0,4)+"...";

your_text_view.setText(YourString);
}else{

 your_text_view.setText(YourString); //Dont do any change

}

一点小技巧^_^。虽然它不是一个好的解决方案。但是一项对我有用的工作:D

编辑: 根据您的有限编号,我添加了检查较少字符。的字符。

于 2014-01-15T11:45:49.057 回答
4

我通过使用得到了想要的结果

android:maxLines="2"
android:minLines="2"
android:ellipsize="end"

诀窍是将 maxLines 和 minLines 设置为相同的值......而且不仅仅是 android:lines = "2",不要这样做。此外,您正在避免任何不推荐使用的属性。

于 2015-02-17T15:12:39.243 回答
4

您需要将以下行添加到 textview 的布局中

android:maxLines="1"
android:ellipsize="end"
android:singleLine="true"

希望这对你有用。

于 2016-03-01T09:22:24.993 回答
4

为了使用android:ellipsize属性,您必须限制TextView的布局宽度,以便文本超出 TextView 视图的范围。

所以,android:layout_width属性在这里起着关键作用,相应地设置它。

一个例子可以是:

<TextView        
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:ellipsize="end"
    android:text="This is a very long text to be displayed"
    android:textSize="12sp"
    android:maxLines="1"            
     />

现在,如果android : text ="This is a very long text to be display" 中的文本从 TextView 中以android:layout_width="120dp" 消失,则android:ellipsize="end"将截断文本并在它之后放置...(3 个点)。ie This is very long...会显示在TextView中。

于 2017-05-05T09:31:40.983 回答
4
        <TextView
            android:id="@+id/product_description"
            android:layout_width="165dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="2dp"
            android:paddingLeft="12dp"
            android:paddingRight="12dp"
            android:text="Pack of 4 summer printed pajama"
            android:textColor="#d2131c"
            android:textSize="12sp"
            android:maxLines="2"
            android:ellipsize="end"/>
于 2019-07-18T12:30:20.857 回答
3

我认为您给出了文本视图的固定高度和宽度。然后您的解决方案将起作用。

于 2012-05-25T05:21:49.053 回答
3

您可以在 xml 中写下这一行textview

android:singleLine="true"
于 2012-05-25T05:22:02.747 回答
2

@AzharShaikh 的方法效果很好。

android:ellipsize="end"
android:maxLines="1"

但是我意识到 TextView 会被单词截断(默认)的麻烦。显示我们是否有如下文本:

测试 long_line_without_any_space_abcdefgh

TextView 将显示:

测试...

我找到了解决这个问题的解决方案,用 unicode 不间断空格字符替换空格,它使 TextView 换行字符而不是单词:

yourString.replace(" ", "\u00A0");

结果:

测试 long_line_without_any_space_abc...

于 2016-11-07T10:15:44.233 回答
2

简单的三个点

android:layout_width="100dp" <!--your dp or match_parent or 0dp>
android:maxLines="2" <!--count your line>
android:ellipsize="end"
于 2020-11-24T19:30:15.350 回答
2

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

  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" />
于 2021-08-28T08:51:16.640 回答
1

在文本中添加这两行

android:ellipsize="end"
android:singleLine="true"
于 2016-11-07T10:11:35.850 回答
1

除了

android:ellipsize="end" 
android:maxLines="1"

你应该设置

android:layout_width="0dp"

也称为“匹配约束”,因为该wrap_content值只是扩展框以适应整个文本,而该ellipsize属性无法发挥作用。

于 2020-07-30T00:28:07.603 回答
0

你可以这样做xml

<TextView 
    android:id="@+id/textview"
    android:maxLines="1" // or any number of lines you want
    android:ellipsize="end"
    />
于 2017-11-06T21:37:34.090 回答
0

设置android:maxLength="8"Textview

如果你想设置 yourString >5。然后设置 textview 长度 5+3(对于三点)

if (yourString.length()>5) // 
    {
        textview.setText(yourString.substring(0,5)+"...");
    }
    else {
        textview.setText(title);
    }
于 2021-05-31T05:17:01.787 回答
0

1.设置静态width like 7odp

2.使用 android:ellipsize="end"

3.使用 android:maxLines="1"

4.使用 android:singleLine="true"

<TextView
        android:id="@+id/tv_status"
        **android:layout_width="70dp"**
        android:layout_height="wrap_content"
        android:layout_marginEnd="@dimen/padding_8"
        android:gravity="center|center_horizontal"
        android:includeFontPadding="false"
        android:textColor="@color/black_2a"
        android:textSize="@dimen/text_size_1"
        **android:ellipsize="end"
        android:maxLines="1"
        android:singleLine="true"**
        app:layout_constrainedWidth="true"
        app:borrowStatusText="@{item.lenders[0].status}"
        app:layout_constraintEnd_toStartOf="@id/iv_vector"
        app:layout_constraintTop_toTopOf="parent" />
于 2021-06-01T15:05:52.517 回答
-1

你只要换...

android:layout_width="wrap_content"

使用下面的行

android:layout_width="match_parent"

…………

   <LinearLayout
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerVertical="true"
       android:layout_marginLeft="10dp"
       android:layout_marginTop="10dp"
       android:layout_toRightOf="@+id/visitBox"
       android:orientation="vertical" >

             <TextView
                  android:id="@+id/txvrequestTitle"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:singleLine="true"
                  android:text="Abcdefghighiklmnon"
                  android:textAppearance="? 
                  android:attr/textAppearanceLarge"
                  android:textColor="@color/orange_color" />

   </LinearLayout>
于 2014-10-15T13:53:05.077 回答