LinearLayout não expandindo dentro de um ScrollView

? Felix @ | Original: StackOverFlow

Eu tenho um LinearLayout dentro de um ScrollView, que tem android:layout_height="fill_parent", mas não se expandir para toda a altura do ScrollView . Minha disposição é algo como :

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

Eu posso ver que o LinearLayout não se expande a altura total do ScrollView porque em Eclipse em Android Layout Editor, se eu escolher o ScrollView ( no painel de esquema) destaca-se com uma borda vermelha que preenche da tela para o fundo, mas quando eu seleciono o LinearLayout seu destaque não se expande para a parte inferior da tela. Como posso obtê-lo a fazê-lo ?

O efeito que eu estou tentando alcançar é ter algum texto e um botão abaixo dele (dentro do LinearLayout no nível 4 há apenas um botão) . O texto pode ser grande o suficiente para precisar de uma barra de rolagem, caso em que eu quero que o usuário tem que rolar para baixo, a fim de ver o botão . No caso de o texto não é grande o suficiente para uma barra de rolagem, eu quero o LinearLayout contendo o botão para manter a parte inferior da tela.

No começo eu pensei que eu não deveria deixar o XML completo, pois geralmente é um turn-down para ver um enorme pedaço de código em uma pergunta. No entanto, ao que parece, pode ser necessário, então aqui está o layout completo.

<?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>

No momento eu ter recorrido a android:layout_gravity="bottom" sobre a problemática LinearLayout, o que torna o pau botão para a parte inferior da tela, não importa o quê. Mas isso também faz com que a vara de texto para a parte inferior da tela, o que não é exatamente o que eu estava procurando.

Update: scratch que, android:layout_gravity="bottom" faz com que o ScrollView incapaz de, bem, de rolagem. Outras idéias ?

Top 5 Responder

1snctln @

Você pode fornecer seu xml layout? Fazê-lo seria permitir que as pessoas para recriar o problema com o mínimo esforço.

Você pode ter que definir

android:layout_weight="1"

para o item que deseja expandido

2Felix @

Encontrada a solução me no final. O problema não era com o LinearLayout, mas com o ScrollView ( estranho parece, considerando o facto de o ScrollView foi expansão, enquanto a LinearLayout não era ) .

A solução foi usar android:fillViewport="true" sobre o ScrollView .

3Braj @

Eu tenho usado de forma dinâmica para conseguir isso. Eu tenho um LinearLayout e dentro deste usado ScrollView como uma criança. Então eu tomar novamente LinearLayout e adicionar o que nunca Ver u quer este LinearLayout e então este LinearLayout adicionar ao ScrollView e, finalmente, adicionar este ScrollView para LinearLayout . Então u pode se deslocar em ur ScrollView e nada vai para a esquerda para visível.

LinearLayout ( Pais ) - ScrollView ( filho de LinerLayout ) - LinearLayout ( filho de ScrollView ) - acrescentar aqui textView, botões, girador etc tudo o que vc quiser . Em seguida, adicione este LinearLyout para ScrollView . Bcoz apenas um filho para ScrollView add aplicável e este último ScrollView para LinearLyout.If área definida é ultrapassar a partir do tamanho da tela, em seguida, vai obter um Scroll dentro ScrollView .

4Vishal_Pandey @

No meu caso eu não tenha dado o

orientação de LinearLayout ( de ScrollView Criança)

Então, por padrão, é preciso horizontal, mas scrols ScrollView verticalmente, portanto, verifique se ' android: orientation = "vertical" ' está definida para o seu ScrollView Criança ( No caso de LinearLayout ) .

Este foi o meu caso espera que isso ajude alguém

.