Я столкнулся с проблемой, связанной с неправильной установкой высоты 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, но, похоже, ничего не работает так, как я хочу.
Любые предложения будут очень признательны. Прокомментируйте, если я что-то пропустил или вы хотите получить дополнительную информацию.
Я СДЕЛАНО ДА
Все, что мне нужно было сделать, это добавить представление с 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"/>
Спасибо, это был вес = 1, я также добавил подробности к ответу.
вы говорите, что добавили представление с
weight=0
, но в вашем ответе естьweight=1
- пожалуйста, можете ли вы посоветовать, какой именно?