如何将Button对齐,而不会被TextView重叠?

时间:2010-04-27 11:30:54

标签: java xml android relativelayout

我正试图得到这样的东西:http://img202.imageshack.us/img202/552/layoutoy.png。我将它用作列表项(从技术上讲,它是ExpandableListView的组视图)。

这是XML文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight">

    <TextView
        android:id="@+id/list_item_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="end" />

    <Button
        android:id="@+id/list_item_button"
        android:text="Click me!"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_toRightOf="@id/list_item_text" />

</RelativeLayout>

但这不起作用。 Button不包装其内容,而是使用所有可用的水平空间。 TextView 包装其内容,但我想要它做的是在它与Button重叠时切断。

换句话说,无论textview中的文本量如何,我都希望所有按钮具有相同的宽度。这有可能吗?

2 个答案:

答案 0 :(得分:5)

我认为你应该反过来试试。 使TextView位于按钮的左侧。这样Textview就不会与Button重叠。如果你想在它的最后切割它,你必须将它约束到一行。目前它只会将文本的其余部分移动到下一行。

这应该可以解决问题:

    

<Button
    android:id="@+id/list_item_button"
    android:text="Click me!"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"/>

<TextView
    android:id="@+id/list_item_text"
    android:text="veryveryveryveryveryveryveryveryveryverylong"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@id/list_item_button"
    android:ellipsize="end" />

</RelativeLayout>

答案 1 :(得分:4)

在任何人尝试上面显示的方法(使用RelativeLayout)之前,您应该使用LinearLayout。权重应该正确设置:需要占用空白空间的元素必须具有1的权重和设置为fill_parent的宽度,需要保持其最小尺寸的元素必须具有0的权重,宽度为WRAP_CONTENT。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight">
<TextView
    android:id="@+id/list_item_text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight=1
    android:ellipsize="end" />

<Button
    android:id="@+id/list_item_button"
    android:text="Click me!"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight=0/>

</LinearLayout>