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


#1 楼

不推荐使用:

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

更新:

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


评论


我刚尝试这样做时绝对需要singleLine。即使说不赞成。

– EGHDK
13年8月20日在17:37

android:singleLine =“ true”已弃用,并且有不良副作用。使用android:ellipsize =“ end”和maxLine =“ 1”代替

– Hamidreza Hosseinkhani
2014年12月6日上午8:17

使用singleLine的“不良副作用”是什么?另请参阅:Android中是否已弃用xml属性singleLine?

– Suragch
17年7月24日在5:40



顺便说一句,如果需要的话,android:maxLines可以大于1 :)

–旅游套
17年11月23日在7:35

有谁知道这个消息“ W / StaticLayout:maxLineHeight不应为-1。maxLines:1 lineCount:1“>?

–冷冰
18 Mar 26 '18在16:09

#2 楼

以下是我通过尝试将TextView强制为单行(带有和不带有三个点)的各种选项而学到的东西。 “ 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" />


这只是将文本强制为一行。隐藏任何多余的文本。

相关内容:



android:lines

ellipsize =“ end”

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


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

相关内容:


ellipsize =“ start”(... aaabbbccc)
ellipsize =“ middle”(aaa ... ccc)< br android:Ellipsise,选项的含义


<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取出不会对其造成影响。

相关内容:


Android中的字幕文本/>
<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>


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

评论


但这只是每个单词结尾的省略号。有什么方法可以在very_long_word_without_whitespace ...中间添加...?

– Tobias Reich
17 Mar 8 '17 at 10:45

@TobiasReich,我不知道有一种内置的方式可以完成该任务。您可以使用Paint.measureText自己制作。

– Suragch
17 Mar 8 '17 at 10:49

有时您可能还需要app:layout_constrainedWidth =“ true”

– Dan Crisan
20-2-14在11:03

#3 楼

在布局文件中尝试使用TextView的此属性。.

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


#4 楼

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

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


#5 楼

例如。您可以使用

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"


评论


您最好使用“ \ u2026”而不是“ ...”

–扎罗
15年1月14日在8:59

这只是一个例子。如果我将字符串放在Strings.xml中,那么绝对可以使用unicode。您要在这里输入任何特定原因吗?

– Nayanesh Gupte
15年1月14日在10:34

不。我个人最近了解到Unicode中存在此字符,因此决定分享此知识;)

–扎罗
15年1月14日在11:09

#6 楼

使用


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




#7 楼

我正在使用Horizo​​nal Recyclerview。
1)在CardView中,使用
时TextView垂直变形
android:ellipsize="end"
android:maxLines="1"


检查Jaskolski粗体TextViews Wyman组...


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

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


检查粗体TextViews Wyman组,Jaskolski ...


第二个解决方案对我来说正常工作(使用singleLine)。另外我已经在OS版本:4.1及更高版本(直到8.0)中进行了测试,它可以正常工作而不会崩溃。

#8 楼

代码:

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


xml:

android:maxLines = "5"


例如

在马太福音13 ,门徒问耶稣为什么他用比喻对众人说话。他回答说:“已经知道了天国的奥秘,但是还没有知道。

输出:
门徒在马太福音13章中问耶稣为什么在寓言里对众人说话。他回答说:“这已经赐给你了……

#9 楼

我通过使用

android:maxLines="2"
android:minLines="2"
android:ellipsize="end"
获得了预期的结果

技巧是将maxLines和minLines设置为相同的值...而不仅仅是android:lines =“ 2”,没办法。
也要避免使用任何过时的属性。

#10 楼

您可以限制textview的字符数,并在文本后添加(...)。
假设您只需要显示5个字母,然后再显示(...),只需执行以下操作:
_ ^。虽然它不是一个好的解决方案。但是对我有用的一种工作:D

编辑:字符。

评论


已经在这里解释了

–草帽
2014年1月15日在16:41

#11 楼

您需要在布局中为textview添加以下几行

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


希望这对您有用。

#12 楼

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


#13 楼

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

因此,android:layout_width属性播放一个关键角色,请相应地进行设置。

一个例子可以是:

“这是要显示的很长的文本”从android:layout_width =“ 120dp”的TextView中消失,android:ellipsize =“ end”将截断该文本并在其后放置...(3个点)。即很长...将显示在TextView中。

#14 楼

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

#15 楼

您可以在使用textview的xml中编写此行:

android:singleLine="true"


#16 楼

@AzharShaikh的方法很好用。显示是否有以下文本:

测试long_line_without_any_space_abcdefgh

TextView将显示:

test ...

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

测试long_line_without_any_space_abc ...

#17 楼

在您的文本中添加这两行

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


#18 楼

简单的三个点
android:layout_width="100dp" <!--your dp or match_parent or 0dp>
android:maxLines="2" <!--count your line>
android:ellipsize="end"


#19 楼

您可以通过xml来做到这一点:

<TextView 
    android:id="@+id/textview"
    android:maxLines="1" // or any number of lines you want
    android:ellipsize="end"
    />


评论


如何将3个点@以maxLength =“ 35”属性结尾的任何解决方案?

– Sagar
18-10-8在13:20

#20 楼

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

,还应该设置
android:layout_width="0dp"

也称为“匹配约束”,因为wrap_content值只是将框扩展为适合整个文本,并且ellipsize属性可以没有发挥作用。

#21 楼

您只需更改...

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>


评论


已弃用singleLine

–尼克
20-4-10上午17:04