Android: установка высоты просмотра на 0 - PullRequest
1 голос
/ 18 ноября 2010

У меня есть RelativeLayout, который включает в себя три элемента: TableLayout вверху, который содержит некоторые элементы управления (layout_alignParentTop = true), LinearLayout внизу (layout_alignParentBottom = true), который содержит пару кнопок и ListView, который растягивается между ними (используя layout_below и layout_ над двумя элементами).Это прекрасно работает, но при определенных обстоятельствах нижний LinearLayout должен исчезнуть.Если я использую setVisibility, чтобы установить его View.GONE или установить его высоту до 0, используя setLayoutParams (), то ListView упорно отказывается изменить размер, чтобы занять освобожденное место.Я попытался вызвать requestLayout () практически для всего в иерархии, и, похоже, ничего не работает.Если я запускаю средство просмотра иерархии, я вижу, что представление исчезло / имеет layout_height, равное 0, но все равно не работает.

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

РЕДАКТИРОВАТЬ: Средний макет на самом деле представляет собой RelativeLayout, содержащий ListView, что может иметь значение, я собираюсь попытаться устранить его.Я опубликовал упрощенную версию своего XML, которая дает представление о том, на что я смотрю.

<RelativeLayout
    android:id="@+id/main_container"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/top_table"
        android:layout_alignParentTop="true"
        android:stretchColumns="2"
        android:shrinkColumns="1">
        <!-- removed for simplicity -->
    </TableLayout>
    <RelativeLayout
        android:id="@+id/main_content"
        android:descendantFocusability="afterDescendants"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@id/title_table"
        android:layout_above="@id/ad_toolbar">
        <!-- removed for simplicity -->
        <ListView 
            android:id="@+id/android:list"
            android:layout_alignParentTop="true"
            android:descendantFocusability="afterDescendants"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </RelativeLayout>

    <LinearLayout
        android:id="@+id/bottom_layout"
        android:orientation="vertical"
        android:layout_alignParentBottom="true"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent">
        <!-- removed for simplicity -->
    </LinearLayout>
</RelativeLayout>

1 Ответ

1 голос
/ 18 ноября 2010

Есть ли конкретная причина, по которой вы используете RelativeLayout для родителя?Это похоже на случай, в котором вы должны использовать вертикальный LinearLayout, содержащий TableLayout, ListView, а затем LinearLayout (в этом порядке), где ListView имеет layout_height = "0dip" и layout_weight = "1".Когда вы устанавливаете видимость в нижней части LinearLayout, вес макета ListView должен заставить его расширяться, чтобы заполнить пространство.

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