Eu tenho um LinearLayout
interior ScrollView
que possui android:layout_height="fill_parent"
, mas ele não se expande para a altura total do ScrollView
. Meu layout se parece com:
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 LinearLayout
ele não expande toda a altura do ScrollView
porque no Eclipse Android Layout Editor
, se eu selecionar o ScrollView
(no painel Estrutura de tópicos), ele será destacado com uma borda vermelha que preenche a tela até o fundo, mas quando eu seleciono o LinearLayout
destaque não se expande para a parte inferior da tela. Como posso fazer isso?
O efeito que estou tentando obter é ter algum texto e um botão abaixo (dentro do LinearLayout
nível 4, há apenas um botão). O texto pode ser grande o suficiente para precisar de uma barra de rolagem. Nesse caso, desejo que o usuário precise rolar para baixo para ver o botão. Caso o texto não seja grande o suficiente para uma barra de rolagem, desejo LinearLayout
que o botão que contém o botão fique na parte inferior da tela.
No começo, pensei que não deveria postar o XML completo, porque geralmente é uma desvantagem ver um grande pedaço de código em uma pergunta. No entanto, parece que 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, recorri à android:layout_gravity="bottom"
problemática LinearLayout
, que faz o botão grudar na parte inferior da tela, não importa o quê. Mas isso também faz com que o texto fique na parte inferior da tela, o que não é exatamente o que eu procurava.
Atualização: arranhar isso, android:layout_gravity="bottom"
torna o ScrollView
incapaz de, bem, rolar. Outras idéias?
fonte
android:weight
.Eu sei que este post é muito antigo, para quem não quer usar
android:fillViewport="true"
porque às vezes não traz o edittext acima do teclado. Use o layout relativo, em vez de LinearLayout, para resolver o objetivo.fonte
Você pode fornecer seu layout xml? Isso permitiria que as pessoas recriassem o problema com o mínimo esforço.
Você pode ter que definir
para o item que você deseja expandir
fonte
A solução é usar
android:fillViewport="true"
na visualização Scroll e, além disso, tente usar
"wrap_content"
em vez de"fill_parent"
como"fill_parent"
está obsoleto agora.
fonte
Eu tenho usado dinamicamente para conseguir isso. Eu tenho um LinearLayout e dentro deste ScrollView usado como filho. Então eu pego novamente o LinearLayout e adiciono o que você quiser a esse LinearLayout e, em seguida, o LinearLayout adiciona ao ScrollView e, finalmente, adiciona esse ScrollView ao LinearLayout. Então você pode obter a rolagem no seu ScrollView e nada será deixado visível.
LinearLayout (Pai) - ScrollView (filho de LinerLayout) - LinearLayout (filho de ScrollView) - adicione aqui textView, Buttons, spinner etc, o que você quiser. Em seguida, adicione este LinearLyout ao ScrollView. Bcoz apenas uma CRIANÇA para o ScrollView aplicável e, por último, adicione esse ScrollView ao LinearLyout. Se a área definida exceder o tamanho da tela, você obterá um Scroll no ScrollView.
fonte
No meu caso, eu não dei o
Portanto, por padrão, é horizontal, mas o scrollview é executado verticalmente; portanto, verifique se 'android: guidance = "vertical"' está definido como o filho do ScrollView (no caso de LinearLayout).
.
fonte