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?

Troj
fonte
4
possível duplicata Como fazer uma rolagem LinearLayout
Narkha

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.

Bryan Denny
fonte
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>
krunal shah
fonte
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>
Avijit Karmakar
fonte
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.

Patrick Murphy
fonte
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>
Mente de engenharia
fonte
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.

Tulsi
fonte
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>
anksanu
fonte
-27

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

alishan
fonte
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