使用多个文本视图进行省略号处理

3
我有一个作为LinearLayout实现的ListView行。里面有3个水平方向对齐到左边的TextViews。通常一行看起来像这样:
0 普通昵称 2013年12月18日
但有时候昵称很长,当所有三个TextViews不适合屏幕时,我希望它被省略。我想让文本看起来像这样:
0 极其长的昵称... 2013年12月18日
但我得到了这个结果:
0 极其长的昵称 2013年12月2

布局
<TextView
        android:id="@+id/cmnt_row_rating"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="left"
/>

<TextView
        android:id="@+id/cmnt_row_author"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/cmnt_row_rating"
        android:gravity="left"
        android:lines="1"
        android:ellipsize="end"
        android:scrollHorizontally="true"
/>

<TextView
        android:id="@+id/cmnt_row_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/cmnt_row_author"
        android:gravity="left"
        android:lines="1"
/>

有没有一种方法可以达到我需要的效果?

请查看我的答案,它将解决您的所有问题。 - Avijit
3个回答

2
尝试这样做.. 对于那个 TextView,使用 android:singleLine="true",并且对于每个 TextView 使用 android:layout_weight="1" 来实现等间距。对于 weight,需要使用 LinearLayout。请保留 HTML 标签。
<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

<TextView
        android:id="@+id/cmnt_row_rating"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:singleLine="true"
        android:gravity="left"
/>

<TextView
        android:id="@+id/cmnt_row_author"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="left"
        android:lines="1"
        android:singleLine="true"
        android:ellipsize="end"
        android:scrollHorizontally="true"
/>

<TextView
        android:id="@+id/cmnt_row_date"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:singleLine="true"
        android:gravity="left"
        android:lines="1"
/>
</LinearLayout>

很好,这种方法可以用省略号解决问题,但会使所有的文本视图宽度相同,而我不需要这个。 - Sergi0
@Sergi0 然后对于仅一个“TextView”使用 android:layout_weight="1",对于其他删除它并使用 android:layout_width="wrap_content" - Hariharan
好的,这个更好,但是日期被对齐到右边了,因为昵称占用了所有的空间。 - Sergi0
好的,接受你的版本,因为它比其他人更接近。无法接受ems版本,因为行宽不同。 - Sergi0

0

android:ems=""设置为以下内容:

<TextView
        android:id="@+id/cmnt_row_rating"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="left"
/>

<TextView
        android:id="@+id/cmnt_row_author"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/cmnt_row_rating"
        android:gravity="left"
        android:lines="1"
        android:ellipsize="end"
        android:ems="3"
        android:scrollHorizontally="true"
/>

<TextView
        android:id="@+id/cmnt_row_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/cmnt_row_author"
        android:gravity="left"
        android:lines="1"
/>

我已经将其设置为3。根据您的需要更改。


这样做可以使中间部分始终占据相同的空间,无论它是3个字符还是10个字符长:0 Short_____________18.12.2013,而不是0 Short_18.12.2013 - Sergi0

0

使用android:maxEms属性来限制你的TextView中的字符数量。根据需要更改maxEms的值。

<TextView
    android:id="@+id/cmnt_row_author"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@id/cmnt_row_rating"
    android:gravity="left"
    android:lines="1"
    android:ellipsize="end"
    android:maxEms="4"
    android:scrollHorizontally="true"
/>

问题在于文本看起来像这样 0 Ridiculously L...______18.12.2013,而不是像这样 0 Ridiculously L..._18.12.2013。因此它截断了中间的视图,但仍然占用了所有的空间。 - Sergi0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接