在TextView上对齐时,Android RelativeLayout align_below不会强制执行?

时间:2014-06-04 11:42:27

标签: android alignment android-relativelayout

我发现将RelativeLayout中的元素按正确顺序保留的问题。

我正在尝试实现以下元素放置:

Date
<DatePicker>
Value <EditText>
Description <EditText>

请参阅下面的屏幕截图,以便更好地了解它的外观:

enter image description here

问题是Description标签(TextView标识为label_description)和相关EditText元素显示在DatePicker之上,当它有android:layout_below="@id/edittext_value"

将此更改为android:layout_below="@id/label_value"(在文本标签下方对齐,而不是EditText元素)似乎有效,但我仍然想了解这里发生了什么。

在Eclipse编辑器和正在运行的应用程序中也是如此。

知道这里有什么问题吗?

XML在下面。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/add_expense"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <!-- Date: field -->
    <TextView
        android:id="@+id/label_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="@string/label_field_date"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <DatePicker
        android:id="@+id/datepicker_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/label_date"
        android:layout_centerHorizontal="true"
        android:calendarViewShown="false" />


    <!-- Value: field -->
    <TextView
        android:id="@+id/label_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@id/label_date"
        android:layout_below="@id/datepicker_date"
        android:text="@string/label_field_value"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
        android:id="@+id/edittext_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignBaseline="@id/label_value"
        android:layout_toRightOf="@id/label_value"
        android:inputType="numberSigned"/>

    <!-- Description: field -->
    <TextView
        android:id="@+id/label_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@id/label_value"
        android:layout_below="@id/edittext_value"
        android:text="@string/label_field_description"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
        android:id="@+id/edittext_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignBaseline="@id/label_description"
        android:layout_toRightOf="@id/label_description"
        android:inputType="textAutoComplete"/>


   <!-- buttons -->

   <Button
        android:id="@+id/button_OK"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_marginBottom="18dp"
        android:text="@string/label_button_addexpense_OK" />

   <Button
        android:id="@+id/button_clear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@id/button_OK"
        android:layout_centerHorizontal="true"
        android:text="@string/label_button_addexpense_clear" />

   <Button
        android:id="@+id/button_cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@id/button_OK"
        android:layout_alignParentRight="true"
        android:text="@string/label_button_addexpense_cancel" />

</RelativeLayout>

5 个答案:

答案 0 :(得分:0)

使用此

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/add_expense"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin" >

<!-- Date: field -->

<TextView
    android:id="@+id/label_date"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="Date"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<DatePicker
    android:id="@+id/datepicker_date"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/label_date"
    android:layout_centerHorizontal="true"
    android:calendarViewShown="false" />

<!-- Value: field -->

<TextView
    android:id="@+id/label_value"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/datepicker_date"
    android:text="Value"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
    android:id="@+id/edittext_value"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/label_value"
    android:layout_below="@+id/datepicker_date"
    android:layout_toRightOf="@id/label_value"
    android:inputType="numberSigned" />

<!-- Description: field -->

<TextView
    android:id="@+id/label_description"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/label_value"
    android:text="description"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
    android:id="@+id/edittext_description"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/label_description"
    android:layout_below="@+id/label_value"
    android:layout_toRightOf="@+id/label_description"
    android:inputType="textAutoComplete" />

<!-- buttons -->

<Button
    android:id="@+id/button_OK"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_marginBottom="18dp"
    android:text="Ok" />

<Button
    android:id="@+id/button_clear"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/button_OK"
    android:layout_centerHorizontal="true"
    android:text="Clear" />

<Button
    android:id="@+id/button_cancel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/button_OK"
    android:layout_alignParentRight="true"
    android:text="Cancel" />

</RelativeLayout>

答案 1 :(得分:0)

内部相对布局使用线性布局,并使用android:layout_weight =“”将页面拆分为不同的部分。确定方向。如果没有工作让我知道我会给出另一个解决方案。

答案 2 :(得分:0)

试试这个。

<?xml version="1.0" encoding="utf-8"?>

<!-- Date: field -->

<TextView
    android:id="@+id/label_date"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="Date"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<DatePicker
    android:id="@+id/datepicker_date"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/label_date"
    android:layout_centerHorizontal="true"
    android:calendarViewShown="false" />

<!-- Value: field -->

<TextView
    android:id="@+id/label_value"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/datepicker_date"
    android:layout_marginTop="5dip"
    android:text="Value"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
    android:id="@+id/edittext_value"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/label_value"
    android:layout_marginTop="5dip"
    android:layout_toRightOf="@+id/label_value"
    android:inputType="numberSigned" />

<!-- Description: field -->

<TextView
    android:id="@+id/label_description"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/label_value"
    android:layout_marginTop="5dip"
    android:text="Description"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
    android:id="@+id/edittext_description"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/label_description"
    android:layout_marginTop="5dip"
    android:layout_toRightOf="@+id/label_description"
    android:inputType="textAutoComplete" />

<!-- buttons -->

<Button
    android:id="@+id/button_OK"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_marginBottom="18dp"
    android:text="OK" />

<Button
    android:id="@+id/button_clear"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/button_OK"
    android:layout_centerHorizontal="true"
    android:text="ADD" />

<Button
    android:id="@+id/button_cancel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/button_OK"
    android:layout_alignParentRight="true"
    android:text="Cancel" />

答案 3 :(得分:-1)

尝试使用@ + id /而不是@ id /,因为有时会出现ssue

答案 4 :(得分:-1)

TextView,身份label_description更改

android:layout_below="@id/edittext_value"

android:layout_below="@id/label_value"