Android的奇怪问题:ellipsize =“end”

时间:2013-06-16 08:01:38

标签: android android-layout android-ui

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

以下是我的设备布局的屏幕截图

enter image description here

我不知道为什么会这样。这是我的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&amp; iv_next_tier 是右侧的小箭头型ImageView。 &安培; tv_news_content 是我遇到问题的TextView。

任何解决方案为什么我没有获得所需的输出?期望的输出意味着始终正常的行为 - 我希望在 tv_news_content TextView的第二行末尾有3个点,而不是截断的单词。

任何建议都表示赞赏。

5 个答案:

答案 0 :(得分:14)

终于在我的应用中发现了导致此问题的原因!!

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

事实证明这是导致它的新行字符'\n'。即使新行在ellipsize之后,新行字符[不一致]导致此问题,只要它在字符串中的某个位置。

在将文本设置到视图之前,通过执行与以下类似的操作来解决此问题:

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

答案 1 :(得分:2)

设置textview的文本时,请确保文本不超过750个字符,因此在调用settext之前使用txt = theText.substring(0,750)或类似的东西。这适用于您的Feed的模拟器。而且对于10英寸平板电脑也应该是足够的角色

答案 2 :(得分:0)

看看this post。有一个自定义的EllipsizingTextView解决了多线视图的椭圆化问题。但是它也可以解决你的问题。

答案 3 :(得分:0)

我在显示包含html格式文本的String时遇到了同样的问题。

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

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

答案 4 :(得分:-1)

我用过:

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