Позиционирование ListView внутри FrameLayout

Итак, я пытаюсь создать экран с ListView, и мне нужно иметь возможность размещать другой настраиваемый горизонтальный ListView прямо у нижнего края экрана. Когда пользователь прокручивает вертикальный список, горизонтальный становится невидимым и снова появляется, когда прокрутка прекращается. Я решил, что FrameLayout будет лучшим выбором для перекрывающихся представлений. Но я не могу заставить эту работу работать. Горизонтальный список, кажется, занимает все пространство экрана. Есть идеи? Это вообще правильный подход? Я хочу иметь что-то похожее на фиксированный элемент div в HTML.
Вот мой XML:

ОБНОВЛЕНИЕ-1: использовал RelativeLayout, как было предложено, но все равно не пошел. Кажется, что HorizontalListView по-прежнему занимает весь экран. Я использую HorizintalListView из здесь

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

    <ListView
        android:id="@+id/messages" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:layout_marginTop="5dip" />


    <RelativeLayout 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" >

        <test.ui.app.HorizontalListView 
                android:id="@+id/folders"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" 
                android:background="#FFFFFF" />

    </RelativeLayout>



</RelativeLayout>

person HungryTux    schedule 20.10.2011    source источник


Ответы (3)


Я заставил его работать, самостоятельно установив высоту внутреннего относительного макета вместо использования «wrap_content».

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

    <ListView
        android:id="@+id/messages" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" />


    <RelativeLayout 
        android:layout_width="wrap_content" 
        android:layout_height="80dip"
        android:layout_alignParentBottom="true" >

        <test.ui.app.HorizontalListView 
                android:id="@+id/folders"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" 
                android:background="#FFFFFF" />

    </RelativeLayout>



</RelativeLayout>
person HungryTux    schedule 24.10.2011

Вы не можете настроить представления внутри FrameLayout. Поэтому вам будет лучше использовать RelativeLayout. Или вы можете поместить свои списки в RelativeLayout или linearlayout, а затем настроить.

Надеюсь, что это поможет вам. :)

person Android Killer    schedule 20.10.2011

Как сказал другой ответчик, вы можете использовать RelativeLayout:

  • установить android:layout_alignParentLeft|Right|Top|Bottom="true" для представления вертикального списка
  • установите android:layout_alignParentLeft|Right|Bottom="true" для горизонтального представления списка (и высоту "wrap_content" или фиксированный размер)

Или, если вы очень хотите придерживаться FrameLayout (возможно, из соображений производительности...), вы можете просто добавить огромный android:layout_marginTop в горизонтальное представление списка. Но это решение уродливее, так как вам нужно установить точные значения. Например, если весь экран имеет высоту 320 dp, а вы хотите, чтобы горизонтальное представление списка имело высоту 80 dp, вам нужно установить верхнее поле на 240 dp. Однако, если вы запустите это на экране с другим соотношением сторон, горизонтальный вид списка будет некрасивым.

person Pal Szasz    schedule 20.10.2011
comment
Я обновил макет, чтобы использовать RelativeLayouts, но, похоже, это тоже не помогает. Поэкспериментирую с ним еще немного. Что-нибудь бросается в глаза в обновленном макете? - person HungryTux; 21.10.2011