【问题标题】:ellipsize with multiple text views具有多个文本视图的椭圆
【发布时间】:2014-01-06 04:29:30
【问题描述】:

我将 ListView 行实现为 LinearLayout。内部有 3 个 TextView,水平方向并左对齐。通常一行如下所示:
0 Normal Nickname 18.12.2013
但有时昵称文本很长,所以我希望当所有三个 TextView 都不在屏幕上时,它是椭圆形的。我希望文本看起来像这样:
0 Ridiculously Long Ni... 18.12.2013
但我得到了这个:
0 Ridiculously Long Nickname 18.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"
/>

有没有办法达到我需要的效果?

【问题讨论】:

  • 看我的回答。它将对您的所有问题进行排序。

标签: android textview


【解决方案1】:

试试这个.. 为 TextView 使用 android:singleLine="true" 并且每个 TextView 使用 android:layout_weight="1" 的空间相等。对于 weight,您需要使用 LinearLayout

<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 然后将android:layout_weight="1" 用于仅一个TextView 用于其他删除它并使用android:layout_width="wrap_content"
  • 好的,这个更好,但它的日期要向右对齐,因为昵称占用了所有可用空间。
  • 好的,接受你的,让它比其他人更接近。无法接受 ems 版本,因为行的宽度不同。
【解决方案2】:

像这样设置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
【解决方案3】:

使用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。所以它截断了中间的视图,但它仍然占据了所有的空间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-15
  • 2014-02-01
  • 2013-02-02
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多