AlignBaseLine但避免Android布局中的循环依赖

时间:2016-07-13 19:06:10

标签: java android android-layout

我尝试将CheckBox对齐EditText的右侧。问题是,如果按照我的方式进行,我会有循环依赖。

我想在EditTexts的BaseLine上对齐Powerbox和Landline复选框。

screenshot

目前我使用此代码

        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/txt_elec_box"
            android:id="@+id/electricityBox"
            android:layout_below="@id/streetText"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:paddingTop="5dp" />

        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"                
            android:id="@+id/streetNumText"
            android:layout_below="@id/streetText"
            android:layout_alignStart="@id/electricityBox"
            android:layout_alignLeft="@id/electricityBox"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:hint="@string/txt_street_check"
            android:layout_toLeftOf="@id/electricityBox" />

         ....

        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/txt_landline"
            android:id="@+id/landlineBox"
            android:layout_below="@id/familyNameText"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"                  
            android:paddingTop="5dp" />

        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"                
            android:id="@+id/phoneNumberText"
            android:layout_below="@id/familyNameText"
            android:layout_alignStart="@id/landlineBox"
            android:layout_alignLeft="@id/landlineBox"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_toLeftOf="@id/landlineBox"  />

如您所见,我使用了

android:paddingTop="5dp" 

在复选框上让它们在底部更多一些但我想要做的就是这个

android:layout_alignBaseline="@id/phoneNumberText"

然后出现循环依赖。

我还希望复选框也可以水平对齐,如果可以采用非硬编码宽度的方式(截图中的完美对齐方式是使用我的应用程序的英文版本)。

2 个答案:

答案 0 :(得分:1)

首先,将您的父布局设为LinearLayout,然后对于布局中的每个行项,将其设为RelativeLayout。像这样:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/streetText">

    <EditText
        android:id="@+id/streetNumText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@id/electricityBox"
        android:hint="@string/txt_street_check" />

    <CheckBox
        android:id="@+id/electricityBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:text="@string/txt_elec_box" />

</RelativeLayout>

答案 1 :(得分:0)

将它们包裹在LinearLayout中并使用gravity(或layout_gravity)=“center”