Como você faz um LinearLayout rolável?


241

Tenho muitos itens na tela e preciso usar a barra de rolagem para que o usuário possa rolar para baixo. No entanto, o pergaminho não está visível ou não está funcionando. Como é possível adicionar uma barra de rolagem a LinearLayout?


Respostas:


459

Embrulhe o layout linear com um <ScrollView>

Veja aqui um exemplo:

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout 
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       xmlns:android="http://schemas.android.com/apk/res/android">
       <ScrollView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
            <LinearLayout 
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:orientation="vertical">
                  <!-- Content here -->
            </LinearLayout>
      </ScrollView>
 </LinearLayout>

Nota: fill_parent foi descontinuado e renomeado para match_parent no nível 8 da API e superior.


1
@DanielMagnusson link ainda trabalha aqui ... aqui está um guia de vídeo: youtube.com/watch?v=kNX996ZZ2CI
Bryan Denny

33
Eu não acho que você precise do LinearLayout externo.
Lawrence Kesteloot

1
@ Lawrence Não, não é necessário, mas pode depender da aparência do resto da sua exibição.
Bryan Denny

1
Se você tiver apenas o Scrollview no layout linear superior, receberá o aviso "Este layout ScrollView ou seu pai LinearLayout é inútil; transfira o atributo background para outro modo de exibição", o que significa dizer que é inútil ter um layout linear com apenas um item.
Niels

2
e algum aviso importatn: ScrollView deve ter apenas 1 criança
O-9

145
<ScrollView 
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/scroll" 
      android:layout_width="match_parent"
      android:layout_height="wrap_content">

      <LinearLayout 
            android:id="@+id/container"
            android:orientation="vertical" 
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
      </LinearLayout>

 </ScrollView>

4

Isso pode ser feito usando a tag <ScrollView>. Para o ScrollView , é preciso lembrar que o ScrollView deve ter um único filho .

Se você quiser que seu layout completo seja rolável, adicione <ScrollView>-o na parte superior. Veja o exemplo abaixo.

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroll" 
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout 
        android:id="@+id/container" 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
            <!-- Content here -->
    </LinearLayout>

</ScrollView>

Mas se você quiser que parte de seu layout seja rolável, adicione- <ScrollView>a nessa parte. Veja o exemplo abaixo.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="400dp">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">
                <!-- Content here -->
        </LinearLayout>

    </ScrollView>

</LinearLayout>

4

Aqui está como eu fiz isso por tentativa e erro.

ScrollView - (the outer wrapper).

    LinearLayout (child-1).

        LinearLayout (child-1a).

        LinearLayout (child-1b).

Como o ScrollView pode ter apenas um filho, esse filho é um layout linear. Todos os outros tipos de layout ocorrem no primeiro layout linear. Ainda não tentei incluir um layout relativo, mas eles me enlouquecem, então esperarei até minha sanidade voltar.


Você pode corrigir a formatação, por favor. Sua primeira linha foi perdida na seção de código e o site não me permite corrigi-la, pois é uma edição muito trivial.
Caltor

1

você precisa usar o seguinte atributo e incluí-lo no layout linear

<LinearLayout ...>
<scrollView ...> 

</scrollView>
</LinearLayout>

0

Você precisa colocar o ScrollView como o primeiro filho do arquivo Layout e agora colocar seu layout linear dentro dele. Agora, o Android decidirá, com base no conteúdo e no tamanho do dispositivo disponível, se deseja exibir uma rolagem ou não.

Verifique se o linearlayout não tem irmãos, porque o ScrollView não pode ter mais de um filho.


0
 <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity">

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
                <---------Content Here --------------->
            </LinearLayout>
       </ScrollView>
    </LinearLayout>

-27

Você pode adicionar um atributo no linearLayout: android:scrollbars="vertical"


4
Isso controla a visibilidade apenas das barras de rolagem. Mas isso não cria uma visualização de rolagem para você.
Botond Kopacz 05/05
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.