我有一个ListView,显示了一堆作业。 ListView项使用FrameLayout放置两个TextViews。第一个TextView左对齐,第二个TextView右对齐。 (两个都垂直居中对齐。)第一个显示作业描述的摘要,第二个显示到期日期。

我想做的是使它的到期日占据所需的空间,而说明将占满剩余的空间,如下所示:

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

现在,说明文字将继续与日期重叠。但是它将在该行的末尾截断。

无论如何,我可以用XML做到这一点,还是必须在设置getView值之前(大概在我的ojit_code调用中)缩短字符串,从而在代码中做到这一点?如果我在代码中这样做,我将不得不计算字符串将占用的水平空间量,以弄清描述需要多短。看起来可能会变得凌乱...

任何其他有关如何完成此操作的建议,将不胜感激!

最佳答案

代替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>

或交替
<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>

09-17 13:34