奇怪的问题与android:ellipsize =“结束”

我在android xml文件中使用了android:ellipsize =“end” ,令人惊讶的是我没有得到我想要的布局,3个点(…)正在显示,但在点之后还有另一个字被截断。 此外,这是一个“不总是”的行为,检查附加的ListView,有时,行为是正常的,有时不。

以下是我的设备的布局截图,

在这里输入图像说明

我不知道为什么会这样。 这是我的XML文件,有问题的tv_news_content TextView –

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="100dp" android:background="@color/white" > <ImageView android:id="@+id/iv_next_tier" android:layout_width="18dp" android:layout_height="21dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="10dp" android:src="@drawable/right_arrow" > </ImageView> <TextView android:id="@+id/tv_news_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="7dp" android:layout_marginRight="5dp" android:layout_marginTop="3dp" android:layout_toLeftOf="@+id/iv_next_tier" android:ellipsize="end" android:maxLines="2" android:text="News Title" android:textColor="@color/black" android:textSize="17dp" android:textStyle="bold" /> <TextView android:id="@+id/tv_news_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/tv_news_title" android:layout_below="@+id/tv_news_title" android:layout_marginRight="5dp" android:layout_toLeftOf="@+id/iv_next_tier" android:ellipsize="end" android:maxLines="2" android:text="News Contents" android:textColor="@color/black_light" android:textSize="15dp" /> <View android:id="@+id/view" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_below="@+id/tv_news_content" android:layout_marginTop="5dp" /> 

为了清楚起见tv_news_title是最上面的粗体TextView,& iv_next_tier右边的小箭头型ImageView。 & tv_news_content是我正面临问题的TextView。

任何解决scheme为什么我没有得到所需的输出? 所需的输出意味着总是正常的行为 – 我想要在tv_news_content TextView的第二行结尾的那3个点,而不是在截断的单词之前。

任何build议表示赞赏。

Solutions Collecting From Web of "奇怪的问题与android:ellipsize =“结束”"

当为textview设置文本时,确保文本不超过750个字符,所以在调用settext之前使用txt = theText.substring(0,750)或类似的东西。 这与您的饲料模拟器上工作。 对于10寸平板电脑来说也应该足够了

终于find了在我的应用程序中造成这个问题的原因

RuAware的回答让我走上了正确的道路,但是我发现它并没有解决我所有文本块的问题。 鉴于它为一些人工作,我觉得这显然是由于一些恶意的性格。 所以我经历了一个破碎的文本块,并开始删除字符,直到它停止。

原来这是导致它的新行字符'\n' 。 即使新的行在ellipsize之后,只要它在string中的某个位置,新行字符[不一致]就会引起这个问题。

在将文本设置到您的视图之前,通过执行类似于以下内容的方法来解决问题:

 text = text.replace('\n',' '); 

看看这个post 。 有一个自定义的EllipsizingTextView可以解决多行视图的椭圆化问题。 但它也可能解决你的问题。

显示包含html格式文本的string时遇到同样的问题。

使用myText.replaceAll("\\<.*?>","")去除所有html标签解决了这个问题。

您也可以使用Html.fromHtml(myText).toString()去除html标签,但请注意您必须使用.toString(),不是直接将fromHtml输出应用于TextView 。 如果某些特殊字符是html编码的(&amp;&gt;&lt;),则可以安全地将Html.fromHtml()应用于最终的String。

我用了 :

 if (myModel.mDataText().length() > 150) { mTextView.setText(Html.fromHtml(myModel.mDataText().substring(0, 150) + "...")); } else { mTextView.setText(Html.fromHtml(myModel.mDataText() + "...")); }