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

时间:2012-05-25 05:15:04

标签: android textview ellipsis

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

22 个答案:

答案 0 :(得分:569)

<强>推荐使用:

在Textview

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

<强>更新

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

答案 1 :(得分:78)

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

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

答案 2 :(得分:30)

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

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

答案 3 :(得分:11)

例如。你可以用

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"

答案 4 :(得分:5)

我使用

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

诀窍是将maxLines和minLines设置为相同的值......并且不仅仅是android:lines =&#34; 2&#34;,这样做的技巧。 您也避免使用任何已弃用的属性。

答案 5 :(得分:4)

代码:

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

的xml:

android:maxLines = "5"

e.g。

在马太福音13章中,门徒们问耶稣为什么用比喻对群众说话。他回答说:“你已经知道天国的奥秘,但对他们来说却没有得到。”

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

答案 6 :(得分: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

修改 我根据您的限制号码增加了支票。人物。

答案 7 :(得分:4)

我正在使用Horizo​​nal Recyclerview。
1)在CardView中,TextView在使用

时会垂直扭曲
android:ellipsize="end"
android:maxLines="1"

检查大胆的TextViews Wyman Group,Jaskolski ...... enter image description here

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

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

检查大胆的TextViews Wyman Group,Jaskolski ...... enter image description here

第二种解决方案适合我(使用singleLine)。我也测试了操作系统版本:4.1及以上(直到8.0),它没有任何崩溃工作正常。

答案 8 :(得分:3)

您需要在文本视图的布局中添加以下行

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

希望这适合你。

答案 9 :(得分:3)

要使用 android:ellipsize 属性,您必须限制 TextView 布局宽度,以便< em> text 超出了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 =&#34中的文本,这是一个非常长的文本要显示&​​#34; 从TextView中消失使用 android:layout_width =&#34; 120dp&#34; android:ellipsize =&#34;结束&#34; 将截断文字并在其后放置 ...(3点)。即 这很长...... 将显示在TextView中。

答案 10 :(得分:2)

我认为你给出了文本视图的修复高度和宽度。那么你的解决方案就可以了。

答案 11 :(得分:2)

你可以在xml中写下这行textview

android:singleLine="true"

答案 12 :(得分:1)

在文字中添加这两行

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

答案 13 :(得分:1)

简单的三个点

// In this case i have 3 input fields 
var keyObjectFields = ["0", "1", "2"];


const observedValues = keyObjectFields.map(
  key => this.credentialsForm.controls[key].valueChanges.pipe(
    map(value => +value),
    startWith(0)
  )
);

const resSurface = combineLatest(observedValues).pipe(
  map(values => values.reduce((sum, curr) => sum + curr))
);

resSurface.subscribe(val => { this.surface = val });

答案 14 :(得分:1)

使用

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

Picture of <code>TextView</code>

答案 15 :(得分:1)

@AzharShaikh的做法很好。

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

但是我意识到TextView会被word截断(默认情况下)。显示我们是否有如下文字:

测试long_line_without_any_space_abcdefgh

TextView将显示:

<强> 测试...

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

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

结果:

测试long_line_without_any_space_abc ...

答案 16 :(得分:0)

你可以通过xml

来做到这一点
<TextView 
    android:id="@+id/textview"
    android:maxLines="1" // or any number of lines you want
    android:ellipsize="end"
    />

答案 17 :(得分:0)

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

答案 18 :(得分:0)

除了

#!/usr/bin/env bash

# Read the array from the output of processing xml
IFS=$'\n' read -r -d '' -a array < <(
  xmllint --shell <<<'cat //factor/@name' a.xml |
    sed -n 's: name=\"\(.*\)\":\1:p'
)

您应该设置

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

也称为“匹配约束”,因为android:layout_width="0dp" 值只是将框扩展为适合整个文本,而wrap_content属性无法发挥作用。

答案 19 :(得分:0)

您只需更改

机器人:layout_width =&#34; WRAP_CONTENT&#34;

使用以下行

机器人:layout_width =&#34; match_parent&#34;

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

答案 20 :(得分:0)

android:maxLength="8"中设置Textview

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

if (yourString.length()>5) // 
    {
        textview.setText(yourString.substring(0,5)+"...");
    }
    else {
        textview.setText(title);
    }

答案 21 :(得分: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" />