ListView не получает места для показа контента на небольших экранах

Итак, я разрабатываю экран, на котором есть некоторые изображения и кнопки сверху, а ниже - список, в котором отображается список некоторых действий.

Дизайн выглядит примерно так: design

Теперь на меньшем экране высота ListView становится очень маленькой, так как пространство экрана занято выше значками и изображениями.

Итак, как я могу увеличить высоту Linearlayout или ListView, чтобы пользователь мог прокрутить список до остальных элементов ListView.

 <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
         .... Other Layouts .....

     <ListView
        android:id="@+id/listArea"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:paddingLeft="@dimen/list_padding"
        android:paddingRight="@dimen/list_padding" />
</LinearLayout>

Изменить: Пробовал использовать верхний вид в качестве заголовка в List, но так как я тоже хочу EmptyView, это создает проблему, поскольку она заменяет весь заголовок + listview

Ответ 1

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

Afaik это работает только в том случае, если список не пуст, поскольку пустой вид заменяет весь список, включая заголовки.

Ответ 2

Вы можете использовать weightSum и layout_weight, чтобы определить, сколько из родительского доступного пространства займет дочернее представление. Чтобы использовать их, родительский макет, например LinearLayout, получает атрибут android:weightSum. Каждый дочерний макет получает атрибут android:layout_weight, где сумма всех весов для детей представляет собой weightSum родителя. Кроме того, у каждого ребенка должен быть установлен layout_height или layout_width на 0dp, в зависимости от того, что будет определено весом.

Вот пример, основанный на вашей диаграмме. Скажем, вы хотите, чтобы два верхних вида занимали 1/4 экрана каждый, а ListView - нижнюю половину. Добавьте android:weightSum="4" к вашим LinearLayout, android:layout_weight="1" к двум дочерним макетам, которые вы представляете с помощью ...Other Layouts... и android:layout_weight="2", к ListView. Код может выглядеть примерно так:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:weightSum="4">

    <ImageView
        android:layout_weight="1"
        android:layout_height="0dp"
        ...some other attributes.../>

    <LinearLayout
        android:layout_weight="1"
        android:layout_height="0dp"
        android:orientation="horizontal"
        ...some other attributes...>
        ...some children of the LinearLayout...
    </LinearLayout>

    <ListView
        android:id="@+id/listArea"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:paddingLeft="@dimen/list_padding"
        android:paddingRight="@dimen/list_padding" 
        android:layout_weight="2"/>

</LinearLayout>