Android:将标签和按钮对齐在多行中

时间:2015-07-05 14:40:38

标签: android android-layout android-xml

我坚持这个布局。所以这就是我想要实现的目标。一种简单的布局,左侧是标签(TextView)或编辑字段(EditText),右侧是按钮。我希望所有标签和所有按钮都垂直调整 - 这意味着所有相同宽度的按钮和所有标签也是如此。

但是怎么做?我尝试了一个垂直方向的LinearLayout,每一行都是另一个水平方向的LinearLayout,里面标签的layout_weight是8,按钮是1.但是这仍然不能保证我想要的东西!

这是当前的结果。你可以看到按钮没有很好地对齐。

the current result

这是我的布局:

the current layout

这是XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

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

        <EditText
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:hint="test_test_blabla"
                android:layout_weight="8"
                android:textSize="24sp"
                android:fontFamily="sans-serif-thin"
                android:layout_gravity="left"
                />

        <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:hint="@string/action_scan"
                android:textSize="24sp"
                android:fontFamily="sans-serif-thin"
                android:layout_weight="1"
                android:layout_gravity="right"
                />

    </LinearLayout>

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

        <TextView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:text="17:35"
                android:layout_weight="8"
                android:textSize="24sp"
                android:fontFamily="sans-serif-thin"
                android:layout_gravity="left"
                />

        <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:hint="@string/action_pick_time"
                android:textSize="24sp"
                android:fontFamily="sans-serif-thin"
                android:layout_weight="1"
                android:layout_gravity="right"
                />

    </LinearLayout>

</LinearLayout>

4 个答案:

答案 0 :(得分:0)

根据人们的建议,我使用了TableLayout。但是标签(EditText)仍然没有使用整个空间直到按钮。

TableLayout

那是XML:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:stretchColumns="1">

    <TableRow>

        <EditText
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:hint="test_test_blabla"
                android:textSize="24sp"
                android:fontFamily="sans-serif-thin"
                android:layout_gravity="left"
                />

        <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:hint="@string/action_scan"
                android:textSize="24sp"
                android:fontFamily="sans-serif-thin"
                android:layout_gravity="right"
                />

    </TableRow>

    <TableRow>

        <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:text="17:35"
                android:textSize="24sp"
                android:fontFamily="sans-serif-thin"
                android:layout_gravity="left"
                />

        <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:hint="@string/action_pick_time"
                android:textSize="24sp"
                android:fontFamily="sans-serif-thin"
                android:layout_gravity="right"
                />

    </TableRow>

    <TableRow>

        <EditText
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:hint="@string/hint_car_location_address"
                android:textSize="24sp"
                android:fontFamily="sans-serif-thin"
                android:layout_gravity="left"
                />

        <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:hint="@string/action_gps"
                android:textSize="24sp"
                android:fontFamily="sans-serif-thin"
                android:layout_gravity="right"
                />

    </TableRow>

</TableLayout>

答案 1 :(得分:0)

编辑:
尝试RelativeLayout
像这样的东西:

 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:columnCount="2">
    <EditText
        android:id="@android:id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@android:id/button1"
        android:text="test"/>
    <Button
        android:id="@android:id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:paddingLeft="28dp"
        android:paddingRight="28dp"
        android:text="set"
        />

    <TextView
        android:id="@android:id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@android:id/button1"
        android:layout_alignBottom="@android:id/button2"
        android:layout_below="@android:id/button1"
        android:gravity="center_vertical"
        android:text="some test"/>

    <Button
        android:id="@android:id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@android:id/button1"
        android:layout_alignLeft="@android:id/button1"
        android:layout_alignRight="@android:id/button1"
        android:text="Scan"
        />
</RelativeLayout>  

enter image description here

答案 2 :(得分:0)

使用RelativeLayout,您可以实现所需的布局:

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

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/textView"
        android:layout_toLeftOf="@+id/button"
        android:fontFamily="sans-serif-thin"
        android:hint="test_test_blabla"
        android:textSize="24sp"/>

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_toRightOf="@+id/textView"
        android:fontFamily="sans-serif-thin"
        android:hint="Scan"
        android:textSize="24sp"/>

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button2"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/editText"
        android:layout_toLeftOf="@+id/button2"
        android:fontFamily="sans-serif-thin"
        android:text="17:35"
        android:textSize="24sp"/>

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/button"
        android:fontFamily="sans-serif-thin"
        android:hint="Pick Time"
        android:textSize="24sp"/>

</RelativeLayout>

用于匹配大小的键布局属性在引用android:layout_alignRight="@+id/textView"下方的EditText的第一个TextView上为{{1}}。

结果:

Imgur

答案 3 :(得分:0)

5年后……OP目前可能是android xml方面的专家。不过,为了解决这个问题,线性布局是可行的。我添加了另一个线性布局以包含所有行,以便可以在此附加布局中调整边距。

使用重量总和时,相应的变量(宽度/高度)必须为0dp,以便可以相应地进行调整。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:orientation="vertical"
        android:weightSum="2">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal"
            android:weightSum="9">

            <EditText
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="8"
                android:fontFamily="sans-serif-thin"
                android:hint="test_test_blabla"
                android:textSize="24sp" />

            <Button
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:fontFamily="sans-serif-thin"
                android:hint="@string/action_scan"
                android:textSize="24sp" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="left"
            android:orientation="horizontal"
            android:weightSum="9">

            <TextView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="8"
                android:fontFamily="sans-serif-thin"
                android:text="17:35"
                android:textSize="24sp" />

            <Button
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:fontFamily="sans-serif-thin"
                android:hint="@string/action_pick_time"
                android:textSize="24sp" />

        </LinearLayout>
    </LinearLayout>

</LinearLayout>