我有ListView
,显示了一堆家庭作业。 ListView
项使用FrameLayout
定位两个TextViews
。第一个TextView
与左侧对齐,第二个与右侧对齐。 (两者在垂直方向上对齐。)第一个显示分配描述的片段,第二个显示截止日期。
我想要做的是使截止日期占用所需的空间,描述填满剩余空间,如下所示:
| ---------------------------------------------- ------ |
|阅读第15-35页,更新时间...周五,5月4日|
| ------------------------------------------------- --- |
现在说明文字将继续与日期重叠。它会在行尾截断。
无论如何我可以在XML中执行此操作,或者在设置TextView
值之前缩短字符串是否必须在代码中执行此操作(可能在我的getView
调用中)?如果我在代码中完成它,我必须计算字符串将占用的水平空间量,以确定描述需要多短。这似乎可能会变得混乱......
非常感谢有关如何实现这一目标的任何其他建议!
答案 0 :(得分:10)
尝试使用ellipsize属性,如:
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"/>
请注意,Android或至少某些版本需要“ellipsize”和“singleline”属性,以便系统实际执行截断并添加省略号。
答案 1 :(得分:7)
而不是FrameLayout,这是与Ellipsize结合使用LinearLayout或RelativeLayout的理想之地:
<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>
答案 2 :(得分:1)
将FrameLayout更改为LinearLayout或RelativeLayout。
LinearLayout:将截止日期宽度“wrap_content”和描述宽度设为0dp,然后将layout_weight =“1”添加到描述中
RelativeLayout:首先使用width wrap_content布局截止日期,然后使用规则布局描述,该规则应该在截止日期的左侧。
答案 3 :(得分: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似乎是可选的 - 我猜它默认为“结束”。)
非常感谢!