Android RelativeLayout и высота wrap_content? - PullRequest
4 голосов
/ 11 мая 2011

Я пытаюсь сделать выбор ListActivity, похожий на тот, который используется для добавления ярлыков на экраны запуска. Я свернул свои собственные верхние и нижние колонтитулы, которые я бы хотел, чтобы они были «липкими» в верхней и нижней части окна при отображении на экране. Чтобы сделать это, я использую RelativeLayout с заголовком, установленным на стыковку сверху, нижний колонтитул установлен на стыковку снизу, а список установлен так, чтобы идти ниже заголовка и над нижним колонтитулом. С точки зрения общего макета действия, это рендеринг, как я и ожидал. Верхний колонтитул липкий вверху, нижний колонтитул липкий внизу, а список прокручивается между ними.

Одна странная вещь произошла, когда я переключился на RelativeLayout в качестве своего корня. Пожалуйста, смотрите следующий скриншот:

enter image description here

Я хочу, чтобы высота моей Деятельности была wrap_content, чтобы форма была такой же высокой, как и содержимое, отображаемое в ней, но как только я переключился на RelativeLayout, она, по-видимому, эффективно отображает Активность как fill_parent, занимая весь экран, хотя содержание этого не гарантирует. Обратите внимание, что для заполнения экрана недостаточно элементов списка, который со стилем fill_parent оставляет кучу пробелов между концом списка и нижним колонтитулом. Я устанавливал свой рост с помощью стилей - который отлично работал с LinearLayout, но теперь, похоже, игнорируется Поэтому я попытался жестко запрограммировать высоту непосредственно в RelativeLayout, но он все еще не работает и по-прежнему отображается как fill_parent.

Вот мой код компоновки:

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
                    style="@style/GroupsList"  
                    android:layout_height="wrap_content">

        <FrameLayout android:layout_height="wrap_content" 
                     android:layout_width="fill_parent" 
                     android:id="@+id/hdrGroups" 
                     android:layout_alignParentTop="true">
            <include layout="@layout/title" 
                     android:layout_width="fill_parent" 
                     android:layout_height="wrap_content">
            </include>
        </FrameLayout>

        <FrameLayout style="@style/MyFooter" 
                     android:layout_height="wrap_content" 
                     android:layout_width="fill_parent" 
                     android:layout_alignParentBottom="true" 
                     android:id="@+id/ftrGroups">
            <ImageView style="@style/CloseButton" 
                       android:layout_height="wrap_content" 
                       android:layout_width="wrap_content" 
                       android:src="@drawable/add" 
                       android:id="@+id/imgGroupsAdd" 
                       android:clickable="true">
            </ImageView>
        </FrameLayout>

        <ListView android:divider="#9f9f9f" 
                  android:id="@+id/android:list" 
                  android:choiceMode="singleChoice" 
                  android:dividerHeight="1dp" 
                  android:layout_height="wrap_content" 
                  android:layout_width="fill_parent" 
                  android:layout_below="@id/hdrGroups" 
                  android:layout_above="@id/ftrGroups">
        </ListView>

        <TextView android:text="@string/browser_no_groups" 
                  style="@style/ListedItemB" 
                  android:id="@+id/android:empty" 
                  android:layout_height="wrap_content" 
                  android:layout_above="@id/ftrGroups" 
                  android:layout_below="@id/hdrGroups" 
                  android:layout_width="fill_parent">
        </TextView>
    </RelativeLayout>

Вся разметка выполняется через XML, ... Я не делаю разметку в коде. Как я могу получить липкий верхний и нижний колонтитулы, при этом активность в целом ведет себя в режиме wrap_content для своей высоты? Есть ли какой-то другой способ, которым я должен идти об этом вместо RelativeLayout?

Ответы [ 2 ]

24 голосов
/ 29 июля 2011

В соответствии с документацией разработчика желаемое поведение для Относительного макета невозможно; (

"Обратите внимание, что у вас не может быть круговой зависимости между размером RelativeLayout и положением его дочерних элементов. Например,у вас не может быть RelativeLayout, высота которого установлена ​​на WRAP_CONTENT, а дочерний - на ALIGN_PARENT_BOTTOM. "

RelativeLayout

Для решения вашей проблемы вы можете попробовать использовать линейныймакет, установите значение wrap_content и установите максимальную высоту с помощью кода для высоты экрана.

Вы можете получить высоту экрана, как описано здесь получить высоту экрана

0 голосов
/ 28 ноября 2016

Я просто меняю свой RelativeLayout in FrameLayout и все начинает работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...