在ListView下添加RelativeLayout时,ListView行会消失

时间:2013-05-14 03:12:33

标签: android android-layout android-listview relativelayout

以下是我希望从我的布局中获得的纵向UI的简化版本:

Portrait desired

这是另一个布局上面的ListView。

复杂的是,当希望将大量行添加到EditText时,我希望整个底部布局(在本例中为“Button2”)可见:

Landscape desired

我一直试图通过在LinearLayout中嵌套RelativeLayout来实现这一目标。不幸的是,当我使用EditText获得我想要的效果时,ListView会消失,例如

ListView disappears

我尝试过很多替代品,但似乎没有任何目标可以实现。

这是我的XML:

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

    <FrameLayout
        android:id="@+id/AAA"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </FrameLayout>

    <LinearLayout
        android:id="@+id/BBB"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/AAA"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/list_container"
            android:layout_width="match_parent"
            android:layout_height="0dip"
            android:layout_weight="1" >

            <ListView
                android:id="@+id/list"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:entries="@array/list_items"/>
        </LinearLayout>

        <RelativeLayout
            android:id="@+id/input_parent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <Button
                android:id="@+id/button1"
                android:layout_above="@+id/bottom_layout"
                android:layout_width="100dip"
                android:layout_height="50dip"
                android:clickable="true"
                android:text="Button1" />

            <EditText
                android:id="@+id/edittext"
                android:layout_above="@+id/bottom_layout"
                android:layout_toRightOf="@+id/button1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:minHeight="50dip"
                android:imeOptions="flagNoExtractUi"
                android:inputType="textMultiLine"
                android:maxLines="8"
                android:scrollbars="vertical" />

            <!-- Align this with the bottom so when the input text area gets
                 really big it doesn't push this section off screen  -->
            <LinearLayout
                android:id="@+id/bottom_layout"
                android:layout_alignParentBottom="true"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical" >

                <Button
                    android:id="@+id/button2"
                    android:layout_width="match_parent"
                    android:layout_height="150dip"
                    android:layout_gravity="bottom"
                    android:clickable="true"
                    android:text="Button2" />

            </LinearLayout>

        </RelativeLayout>

    </LinearLayout>

</RelativeLayout>

如果我从bottom_layout中删除android:layout_alignParentBottom="true",则会出现ListView内容,但是后来我失去了EditText所需的效果。

有人可以帮忙吗?我需要支持OS 2.2 +。

1 个答案:

答案 0 :(得分:1)

简化布局有点像这样:

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

    <FrameLayout
            android:id="@+id/AAA"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
    </FrameLayout>

    <RelativeLayout
            android:id="@+id/BBB"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/AAA"
            android:orientation="vertical" >

            <ListView
                    android:id="@+id/list"
                    android:layout_above="@+id/edittext"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:entries="@array/list_items"/>

            <Button
                    android:id="@+id/button1"
                    android:layout_above="@+id/bottom_layout"
                    android:layout_width="100dip"
                    android:layout_height="50dip"
                    android:clickable="true"
                    android:text="Button1" />

            <EditText
                    android:id="@+id/edittext"
                    android:layout_above="@+id/bottom_layout"
                    android:layout_toRightOf="@+id/button1"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:minHeight="50dip"
                    android:imeOptions="flagNoExtractUi"
                    android:inputType="textMultiLine"
                    android:maxLines="8"
                    android:scrollbars="vertical" />

            <!-- Align this with the bottom so when the input text area gets
                 really big it doesn't push this section off screen  -->
            <LinearLayout
                    android:id="@+id/bottom_layout"
                    android:layout_alignParentBottom="true"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical" >

                <Button
                        android:id="@+id/button2"
                        android:layout_width="match_parent"
                        android:layout_height="150dip"
                        android:layout_gravity="bottom"
                        android:clickable="true"
                        android:text="Button2" />
            </LinearLayout>

    </RelativeLayout>

</RelativeLayout>

似乎给出了你所描述的结果。

Result