自动截断TextView文本,以便不与另一个TextView重叠

mig*_*aus 5 xml android android-layout

我有一个ListView显示一堆家庭作业.这些ListView项目使用a FrameLayout来定位两个TextViews.第一个TextView与左侧对齐,第二个与右侧对齐.(两者在垂直中心对齐.)第一个显示分配描述的片段,第二个显示截止日期.

我想要做的是使截止日期占用所需的空间,描述填满剩余的空间,如下所示:

| ------------------------------------------------- --- |
| 阅读第15-35页,更新时间... 5月4日星期五|
| ------------------------------------------------- --- |

现在,描述文本将继续与日期重叠.它虽然会在行尾截断.

无论如何我可以用XML做到这一点,或者我必须在设置TextView值之前通过缩短字符串来做代码(大概是在我的getView调用中)?如果我在代码中完成它,我必须计算字符串将占用的水平空间量,以确定描述需要多短.这似乎可能会变得混乱......

关于如何实现这一点的任何其他建议非常感谢!

Chr*_*CVB 12

尝试使用ellipsize属性,如:

<TextView android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:ellipsize="end"
      android:singleLine="true"/>
Run Code Online (Sandbox Code Playgroud)

请注意,Android或至少某些版本需要"ellipsize"和"singleline"属性,以便系统实际执行截断并添加省略号.


JRa*_*ond 7

而不是FrameLayout,这是一个LinearLayout或RelativeLayout与ellipsize结合使用的理想场所:

<LinearLayout
  android:orientation="horizontal"
  android:layout_width="match_parent"
  android:layout_height="wrap_content" >

  <TextView
    ...
    android:width="0dp"
    android:height="wrap_content"
    android:layout_weight="1" 
    android:ellipsize="end" />

  <TextView
    ...
    android:width="wrap_content"
    android:height="wrap_content"
    android:layout_weight="0" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

或者交替

<RelativeLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content" >

  <TextView
    ...
    android:id="@+id/secondTV"
    android:width="wrap_content"
    android:height="wrap_content"
    android:layout_weight="0" />

  <TextView
    ...
    android:width="0dp"
    android:height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_toLeftOf="@id/secondTV" 
    android:ellipsize="end"/>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)