Заголовок, содержимое и нижний колонтитул в RelativeLayout без alignParentBottom = "true" - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть следующие настройки, чтобы получить макет с верхним и нижним колонтитулом. Поскольку активность отображается в диалоговом окне, я хочу установить высоту верхнего элемента на «wrap_content». Что касается документов Android, это невозможно, если вы устанавливаете alignParentBottm = "true" для дочернего элемента.

В другом вопросе кто-то предложил использовать LinearLayout и установить maxHeight программно. Есть ли другие способы избежать alignParentBottom = "true"?

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

    <LinearLayout
        android:id="@+id/LNL_TOP"
        android:layout_width="match_parent"
        android:layout_height="60dip"
    android:layout_alignParentTop="true"> 
    </LinearLayout>

    <LinearLayout
        android:id="@+id/LNL_BOTTOM"
        android:layout_width="match_parent"
        android:layout_height="60dip"
        android:layout_alignParentBottom="true">
    </LinearLayout>

    <LinearLayout
        android:id="@+id/LNL_CONTENT"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/LNL_TOP"
    android:layout_above="@+id/LNL_BOTTOM">

         <ListView
             android:layout_width="match_parent"
             android:layout_height="wrap_content"/>

    </LinearLayout>   
 </RelativeLayout>

Вот изображение того, как оно в данный момент выглядит, я хочу, чтобы макет обернул содержимое и избежал пустого места под списком.

enter image description here

Ответы [ 2 ]

4 голосов
/ 11 декабря 2011

Используйте вертикальную LinearLayout вместо:

<?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="wrap_content"
    android:orientation="vertical" >

    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="HEAD"/>
    <!--LinearLayout containing the list here, to go with your posted code, 
it would also work to just have the list outside the layout.-->
    <LinearLayout 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_weight="1">
        <ListView 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="FOOT"/>
</LinearLayout>

При этом тело будет расти со своим содержимым, пока не останется больше места. Затем он начнет опускаться за нижний колонтитул (хотя это не должно быть проблемой, поскольку вы используете ListView для содержимого, поэтому представление расширяется до максимального размера, а затем останавливается, и прокрутка начинает работать).

0 голосов
/ 07 декабря 2011

Поскольку вы сказали, что это диалоговое окно, вы можете, в некотором смысле, увеличивать высоту диалогового окна на неопределенное время, если хотите. Вместо выравнивания по нижней части вида, возможно, просто используйте layout_marginTop на нижнем элементе, чтобы сдвинуть его до нужного уровня. Если вы установите высоту LNL_CONTENT на match_parent, то она будет заполнять любое пространство между ними.

...