为什么textview的长度决定了android中其他元素的位置?

时间:2016-04-03 09:48:10

标签: android

我有以下xml文件来定义我在android中的活动的布局:

<GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    android:useDefaultMargins="true"
    android:alignmentMode="alignBounds"
    android:columnOrderPreserved="false"

    android:columnCount="10"
    android:background="#cccccc"
    >

    <TextView
        android:text="@string/new_title"
        android:textSize="32dip"
        android:layout_columnSpan="10"
        android:layout_gravity="center_horizontal"
        android:id="@+id/textTitleEdit"
        android:layout_row="0"
        android:layout_column="0" />

    <TextView
        android:text="@string/new_descr"
        android:textSize="16dip"
        android:layout_columnSpan="8"
        android:layout_gravity="left"
        android:id="@+id/textSubTitleEdit"
        android:layout_row="1"
        android:layout_column="0" />

    <TextView
        android:text="@string/new_name"
        android:layout_gravity="right"
        android:layout_row="2"
        android:layout_column="0"
        />
    <EditText
        android:ems="7"
        android:singleLine="true"
        android:inputType="textCapWords"
        android:id="@+id/new_name"
        android:layout_row="2"
        android:layout_column="1" />

    <ImageButton
        android:src="@mipmap/ic_backspace_black_24dp"
        android:id="@+id/clear_line"
        android:layout_row="2"
        android:minHeight="15dp"
        android:minWidth="15dp"
        android:maxHeight="15dp"
        android:maxWidth="15dp"
        />

    <ImageButton
        android:src="@mipmap/ic_search_black_24dp"
        android:id="@+id/new_search"
        android:layout_row="2"
        android:minHeight="15dp"
        android:minWidth="15dp"
        android:maxHeight="15dp"
        android:maxWidth="15dp"
        />


    _____________

    <TextView
        android:text="@string/new_label"
        android:layout_gravity="right"
        android:layout_row="3"
        android:layout_column="0" />



    <EditText
        android:ems="7"
        android:singleLine="true"
        android:inputType="textCapWords"
        android:id="@+id/new_label"
        android:layout_row="3"
        android:layout_column="1" />

    ______

    <TextView
        android:layout_column="0"
        android:text="@string/new_price"
        android:layout_gravity="right"
        />

    <EditText
        android:ems="7"
        android:singleLine="true"
        android:id="@+id/new_price"
        android:inputType="numberDecimal"
        android:layout_row="4"
        android:layout_column="1" />



    <TextView
        android:layout_column="0"
        android:text="@string/new_offset"
        android:layout_gravity="right"
        android:layout_row="6" />

    <EditText
        android:ems="7"
        android:singleLine="true"
        android:id="@+id/new_offset"
        android:inputType="number"
        android:layout_row="6"
        android:layout_column="1" />

    <SeekBar
        android:layout_row="7"
        android:layout_width="150dp"
        android:max="10"
        android:id="@+id/seek_offset"
        android:layout_column="1"
        style="@android:style/Widget.Holo.SeekBar"/>

    <Space
        android:layout_row="4"
        android:layout_column="0"
        android:layout_columnSpan="3"
        android:layout_gravity="fill"
        />



    <Button
        android:text="Cancel"
        android:id="@+id/new_cancel"
        android:background="@color/colorPrimaryDark"
        android:layout_row="10"
        android:layout_column="0"
        />
    <Button
        android:text="Ok"
        android:id="@+id/new_ok"
        android:background="@color/colorPrimaryLight"
        android:layout_row="10"
        android:layout_column="8"
        />
</GridLayout>

这很好用,我看到下图中的内容(虽然我可能在这个xml中定义了无关,或者某些不正确的内容,因为我是Android的初学者......)

enter image description here

但是,我在其他一些活动中重复使用此布局,并使用较短的文本替换textView的文本textSubTitleEdit。因此,Ok - 按钮向左移动,并且不再位于右下角的位置。

我的布局有问题吗? TextView的长度如何影响按钮的位置?

1 个答案:

答案 0 :(得分:0)

此处的问题是您使用GridLayout将所有视图放置在布局中。

如果您希望按钮粘贴在屏幕两侧的按钮上,您可以考虑在RelativeLayout上方添加GridLayout,然后按如下方式移动按钮:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#cccccc"
            >

<GridLayout
    android:id="@+id/grid"
    android:layout_margin="8dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_above="@+id/new_cancel"
    android:alignmentMode="alignBounds"
    android:columnCount="10"
    android:columnOrderPreserved="false"
    android:useDefaultMargins="true">

    <TextView
        android:id="@+id/textTitleEdit"
        android:layout_column="0"
        android:layout_columnSpan="10"
        android:layout_gravity="center_horizontal"
        android:layout_row="0"
        android:text="@string/new_title"
        android:textSize="32dip"/>

    ....

    <SeekBar
        android:id="@+id/seek_offset"
        style="@android:style/Widget.Holo.SeekBar"
        android:layout_width="150dp"
        android:layout_column="1"
        android:layout_row="7"
        android:max="10"/>

    <Space
        android:layout_column="0"
        android:layout_columnSpan="3"
        android:layout_gravity="fill"
        android:layout_row="4"
        />

</GridLayout>

<Button
    android:id="@+id/new_cancel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentStart="true"
    android:background="@color/colorPrimaryDark"
    android:text="Cancel"
    />

<Button
    android:id="@+id/new_ok"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentEnd="true"
    android:background="@color/colorPrimaryLight"
    android:text="Ok"
    />

</RelativeLayout>