10

我在 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。

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

任何建议表示赞赏。

4

5 回答 5

14

终于在我的应用程序中找到了导致此问题的原因!

虽然 RuAware 的回答让我走上了正确的道路,但我发现它并没有解决我所有文本块的问题。鉴于它对某些人有效,我觉得这显然是由于某些恶意角色造成的。所以我检查了一个损坏的文本块,然后开始删除字符,直到它停止损坏。

原来是换行符'\n'导致了它。即使新行位于椭圆大小之后,只要新行字符位于字符串中的某个位置,它就会 [不一致地] 导致此问题。

在将文本设置为您的视图之前,可以通过执行类似于以下操作来解决该问题:

text = text.replace('\n',' ');
于 2013-09-28T15:24:01.573 回答
2

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

于 2013-06-16T11:53:24.000 回答
0

看看这个帖子。有一个自定义的 EllipsizingTextView 可以解决多行视图的椭圆化问题。但是,它也可以解决您的问题。

于 2013-06-16T08:22:31.797 回答
0

显示包含 html 格式文本的字符串时,我遇到了同样的问题。

删除所有 html 标签即可myText.replaceAll("\\<.*?>","")解决问题。

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

于 2014-08-26T13:35:08.997 回答
-1

我用了 :

if (myModel.mDataText().length() > 150) {
    mTextView.setText(Html.fromHtml(myModel.mDataText().substring(0, 150) + "..."));
} else {
    mTextView.setText(Html.fromHtml(myModel.mDataText() + "..."));
}
于 2013-06-16T08:09:10.787 回答