5

我有一个ListView显示一堆家庭作业的。这些ListView项目使用 aFrameLayout来定位两个TextViews。第一个TextView是左对齐,第二个是右对齐。(两者都垂直居中对齐。)第一个显示作业描述的片段,第二个显示截止日期。

我想要做的是使截止日期占用尽可能多的空间,并且描述会填满剩余的空间,如下所示:

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

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

无论如何我可以在 XML 中执行此操作,还是必须在设置TextView值之前通过缩短字符串在代码中执行此操作(大概在我的getView调用中)?如果我在代码中这样做,我必须计算字符串将占用的水平空间量,以确定描述需要多短。这似乎会变得混乱......

非常感谢有关如何完成此操作的任何其他建议!

4

4 回答 4

12

尝试使用 ellipsize 属性,例如:

<TextView android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:ellipsize="end"
      android:singleLine="true"/>

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

于 2012-05-03T20:29:12.663 回答
7

这是 LinearLayout 或 RelativeLayout 与 ellipsize 组合的理想位置,而不是 FrameLayout:

<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>
于 2012-05-03T20:32:18.350 回答
1

将 FrameLayout 更改为 LinearLayout 或 RelativeLayout。

  • LinearLayout:使到期日期宽度“wrap_content”和描述宽度0dp,然后将layout_weight =“1”添加到描述中

  • 相对布局:首先使用宽度 wrap_content 布局到期日,然后按照应在到期日左侧的规则布局描述。

于 2012-05-03T20:33:02.993 回答
1

Anton 和 JRaymond 都非常投入(JRaymond 用他的例子帮我弄清楚了)。这就是我想出的:

<RelativeLayout android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <TextView android:id="@+id/due_date"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_alignParentRight="true"
            android:singleLine="true" />

        <TextView android:id="@+id/description"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_alignParentLeft="true"
            android:layout_toLeftOf="@id/due_date"
            android:singleLine="true" />
</RelativeLayout>

(我需要先声明我的截止日期标签,以便我可以在描述中引用它。我也刚刚意识到 android:ellipsize 似乎是可选的——我猜它默认为“结束”。)

非常感谢!

于 2012-05-05T19:32:24.430 回答