LinearLayout не расширяется внутри ScrollView

У меня есть LinearLayout внутри a ScrollView, который имеет android:layout_height="fill_parent", но не расширяется до полной высоты ScrollView. Мой макет выглядит примерно так:

level    layout    layout_width    layout_height
1    LinearLayout    fill_parent    fill_parent
2    LinearLayout    fill_parent    wrap_content
3    (some irrelevant stuff)
2    ScrollView      fill_parent    fill_parent <-- this expands full height
3    LinearLayout    fill_parent    fill_parent <-- this does not (has orientation=vertical)
(following stuff probably are irrelevant, but just to be sure:)
4    TextView        fill_parent    fill_parent
4    LinearLayout    fill_parent    wrap_content

Я вижу, что LinearLayout не расширяет всю высоту ScrollView, потому что в Eclipse в Android Layout Editor, если я выберем ScrollView (на панели Outline), он будет выделен красным граница, которая заполняет экран снизу, но когда я выбираю LinearLayout, его подсветка не расширяется до нижней части экрана. Как я могу заставить это сделать?

Эффект, который я пытаюсь достичь, - это иметь текст и кнопку под ним (внутри LinearLayout на уровне 4 есть только кнопка). Текст может быть достаточно большим, чтобы потребовалась полоса прокрутки, и в этом случае я хочу, чтобы пользователь прокручивал вниз, чтобы увидеть кнопку. Если текст недостаточно велик для полосы прокрутки, я хочу, чтобы кнопка LinearLayout, содержащая кнопку, придерживалась нижней части экрана.

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:id="@+id/video_layout"
        android:focusable="true"
        style="@style/VideoLayout">
        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:foreground="@android:drawable/ic_media_play"
            android:foregroundGravity="center">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/video_thumb"
                android:padding="5dip"
                android:background="#454545"/>
        </FrameLayout>
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:focusable="true"
            style="@style/VideoTitle"
            android:id="@+id/video_title"
            android:layout_gravity="center"
            android:layout_weight="1"/>
    </LinearLayout>
    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1">
        <!-- this ScrollView expands the full height of the screen.
             However, the next LinearLayout does not expand the full height of the ScrollView -->
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:layout_gravity="fill"
            android:orientation="vertical"
            android:id="@+id/info_layout">
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/info_body"
                style="@style/InfoText"/>
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                style="@android:style/ButtonBar">
                    <Button
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:layout_weight="1"
                        android:text="@string/button_readmore"
                        android:id="@+id/btn_read_more"/>
            </LinearLayout>
        </LinearLayout>
    </ScrollView>
</LinearLayout>

В настоящий момент я прибег к android:layout_gravity="bottom" к проблематичной LinearLayout, что заставляет кнопку придерживаться нижней части экрана независимо от того, что. Но это также заставляет текст придерживаться нижней части экрана, что не совсем то, чем я был.

Обновить:, что android:layout_gravity="bottom" делает ScrollView невозможным, ну, прокрутка. Другие идеи?

Ответ 1

Нашел решение сам в конце. Проблема была не с LinearLayout, а с ScrollView (кажется странным, учитывая, что расширение ScrollView было, а LinearLayout не было).

Решение заключалось в использовании android:fillViewport="true" на ScrollView.

Ответ 2

Я знаю, что этот пост очень старый, для тех, кто не хочет использовать android:fillViewport="true", потому что он иногда не поднимает edittext над клавиатурой. Используйте Relative layout вместо LinearLayout, это решает цель.

Ответ 3

Можете ли вы предоставить свой макет xml? Это позволит людям воссоздать проблему с минимальными усилиями.

Возможно, вам придется установить

android:layout_weight="1"

для элемента, который вы хотите развернуть

Ответ 4

Я динамически использовал это. У меня есть LinearLayout и внутри этого используемого ScrollView в качестве дочернего. Затем я снова беру LinearLayout и добавляю все, что когда-либо просматриваю и хочу этот LinearLayout, а затем этот LinearLayout добавляет в ScrollView и, наконец, добавляет этот ScrollView в LinearLayout. Тогда u может получить прокрутку в ur ScrollView и ничего не останется видимым.

LinearLayout (родительский) - ScrollView (дочерний элемент LinerLayout) - LinearLayout (дочерний элемент ScrollView) - добавьте здесь textView, кнопки, spinner и т.д., что бы вы не захотели. Затем добавьте LinearLyout в ScrollView. Bcoz использует только один CHILD для ScrollView и последний добавляет этот ScrollView в LinearLyout. Если определенная область превышает размер экрана, тогда u получит свиток в ScrollView.

Ответ 5

В моем случае я не дал

ориентация LinearLayout (Child ScrollView)

Таким образом, по умолчанию он занимает горизонтальное положение, но scrollview перемещается по вертикали, поэтому, пожалуйста, проверьте, настроен ли "android: orientation =" vertical "'вашему Child ScrollView (в случае LinearLayout).

Это мой случай надеется, что он поможет кому-то

.