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

我有一个TextView ,我想限制它的字符。 其实,我可以做到这一点,但我正在寻找的是如何在string的末尾添加三个点(…)。 这一个显示文本已经继续。 这是我的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"/> 

推荐使用:

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

更新:

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

以下是我通过使用各种选项强制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" /> 

这只是迫使文本一行。 任何额外的文字被隐藏。

有关:

  • 机器人:MAXLINES
  • android:singleLine (注意这个和这个 )
  • 安卓线

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

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

有关:

  • ellipsize =“开始”(… aaabbbccc)
  • ellipsize =“middle”(aaa … ccc)
  • android:ellipsise,选项的含义

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

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

 textView.setSelected(true); 

应该android:maxLines="1"android:singleLine="true"应该做基本相同的事情,因为singleLine 显然不赞成使用,我不想使用它,但是当我把它拿出来,滚动字幕不再滚动了。 尽pipemaxLines不会影响它。

有关:

  • Android中的选取框文字

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> 

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

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

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

我认为你想把宽度限制在一行而不是按字符限制? 由于singleLine不推荐使用,所以可以一起使用以下内容:

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

例如。 您可以使用

 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" 

你可以限制你的文本视图的字符数,并在文本后添加(…)。 假设您只需要显示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 } 

有点破解^ _ ^。 虽然它不是一个好的解决scheme。 但是一个围绕着我的工作:D

编辑:我已经添加检查less字符根据您有限的没有。 字符。

你可以在XML文件中写这行:

 android:singleLine="true" 

码:

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

XML:

 android:maxLines = "5" 

例如

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

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

我通过使用得到了期望的结果

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

技巧是设置maxLines和minLines为相同的值…不只是android:lines =“2”,不要做伎俩。 你也在避免任何被弃用的属性。

为了使用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 =“这是一个非常长的文本要显示”的文本在 android:layout_width =“120dp”的 TextView中出现, android:ellipsize =“end”会截断文本 ,之后放置…(3个点) 。 即这是非常长的…将显示在TextView中。

我认为你给定了文本视图的高度和宽度。 那么你的解决scheme将工作。

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

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

希望这对你有用。

在文本中添加这两行

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

@AzharShaikh的做法很好。

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

但我意识到一个麻烦,即TextView将被截断(默认情况下)。 显示是否有如下文字:

testinglong_line_without_any_space_abcdefgh

TextView将显示:

testing…

我发现解决scheme来处理这个麻烦,用unicode不间断空格replace空格字符,它使TextView换行而不是单词:

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

结果:

testinglong_line_without_any_space_abc …

你只是改变

机器人:layout_width = “WRAP_CONTENT”

使用下面这行

机器人: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> 

你可以通过xml

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