Высота макетов внутри окна просмотра, высота которого установлена ​​для обтекания содержимого

Я столкнулся с проблемой, связанной с неправильной установкой высоты ViewPager при установке android:height = "wrap_content".

Теперь я успешно применил исправление, упомянутое здесь, и оно работает должным образом. Мой ViewPager правильно принимает высоту самого высокого элемента.

Однако! Каждый из элементов внутри моего окна просмотра содержит линейный макет, который содержит 2 элемента, например: (Это мой контейнер)

<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:orientation = "horizontal">
    <ImageView
        android:layout_margin = "@dimen/gutterSpaceHalf"
        android:id = "@+id/icon"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"/>

    <LinearLayout
        android:id = "@+id/foo"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:orientation = "vertical">
        <TextView
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"/>
        <TextView
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"/>
        <Button
            android:layout_gravity = "bottom"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"/>
    </LinearLayout>
</LinearLayout>

Это дает мне макет, который выглядит примерно так:

Высота макетов внутри окна просмотра, высота которого установлена ​​для обтекания содержимого

И что я пытаюсь здесь проиллюстрировать, так это то, что на второй странице LinearLayout foo будет иметь высоту, отличную от высоты первой страницы. Это ожидаемо.

Но проблема возникает, когда я хочу выровнять кнопку на каждой странице по низу! Это, конечно, проблема, поскольку нижняя часть foo на первой странице не будет такой же, как нижняя часть foo на второй странице.

На мой взгляд, стандартным решением было бы установить высоту foo на match_parent. Однако, если я это сделаю, вся страница станет высотой моего просмотра изображения, поскольку примененное исправление, упомянутое выше, больше не может правильно рассчитать высоту каждого дочернего элемента.

Итак, учитывая, что вся моя цель - иметь страницы одинаковой высоты с динамическим содержимым (текстом), при этом кнопки должны быть выровнены по нижнему краю страницы, какое решение вы бы здесь предложили?

Вещи, которые я пробовал, включают изменение настроек высоты на макетах вверху дерева и установку высоты каждого представления на измеренную высоту его контейнера после добавления в мой ViewPagerAdapter, но, похоже, ничего не работает так, как я хочу.

Любые предложения будут очень признательны. Прокомментируйте, если я что-то пропустил или вы хотите получить дополнительную информацию.

0
0
120
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я СДЕЛАНО ДА

Все, что мне нужно было сделать, это добавить представление с weight=1 над моей кнопкой и задать моей кнопке статическую высоту. Теперь кнопка правильно выравнивается до низа на каждой странице из-за того, что добавленное представление расширяется, чтобы заполнить оставшийся размер.

Мне также пришлось добавить +1 к высоте, как это определено в «хакерском» решении, о котором я упоминал выше, иначе добавленное мной представление выталкивало бы элементы из макета самой большой страницы, например:

    if (height != 0) {
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(height + 1 /* This is a heuristic solution */, MeasureSpec.EXACTLY);
    }

YESSSSSS

(изменения макета):

    <TextView
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"/>

    <View  <!-- ADDED -->
        android:layout_width = "match_parent"
        android:layout_height = "0dp"
        android:layout_weight = "1"/>

    <Button
        android:layout_width = "wrap_content"
        android:layout_height = "@dimen/buttonHeight"/>

вы говорите, что добавили представление с weight=0, но в вашем ответе есть weight=1 - пожалуйста, можете ли вы посоветовать, какой именно?

Zayin Krige 09.08.2018 08:11

Спасибо, это был вес = 1, я также добавил подробности к ответу.

S.V. 09.08.2018 11:46

Другие вопросы по теме