Задать вопрос

Странное поведение ListView, находящегося внутри LinearLayout?

Проблема: если какой-либо элемент, кроме другого ListView, находится ниже исходного, верхний ListView сжимает его, несмотря на установку параметра Weight.
код
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" >

    </ListView>

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="5"
        android:scaleType="fitCenter"
        android:src="@drawable/ic_launcher" />

</LinearLayout>



Самое странное то, что на этот параметр ListView всё же реагирует, но очень незначительно. На StackOverflow я смог найти только упоминание о том, что помещение ListView внутрь LinearLayout — ОЧЕНЬ плохая идея, и никаких подробностей.

Как можно разместить компоненты, чтобы избавиться от такого странного поведения? Как ограничить высоту списка, если его нельзя помещать в LinearLayout и подобные контейнеры?..
  • Вопрос задан
  • 3399 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 1
palmut
@palmut
У ListView поставьте android:layout_height="0dp" и будет ожидаемый вариант. Вообще при использовании android:layout_weight у этого контрола желательно ставить android:layout_height (или соответственно android:layout_width) в 0dp. И поведение будет более предсказуемым, да и работает быстрее. А у нижнего ImageView android:layout_weight наверное совсем не нужен.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
Вообще, мне кажется, android:layout_height="wrap_content" у ListView — плохая идея. Попробуйте сделать match_parent.
Ответ написан
@uaSaint
Вместо LinearLayout использовать RelativeLayout и далее в ImageView указать android:layout_below="@+id/listView1"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы