Comment faire défiler un LinearLayout?


241

J'ai beaucoup d'éléments à l'écran et je dois utiliser la barre de défilement pour que l'utilisateur puisse faire défiler vers le bas. Cependant, le défilement n'est pas visible ou ne fonctionne pas. Comment est-il possible d'ajouter une barre de défilement à un LinearLayout?


Réponses:


459

Enveloppez la disposition linéaire avec un <ScrollView>

Voir ici pour un exemple:

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

Remarque: fill_parent est obsolète et renommé match_parent dans l'API niveau 8 et supérieur.


1
@DanielMagnusson Link fonctionne toujours ici ... voici un guide vidéo: youtube.com/watch?v=kNX996ZZ2CI
Bryan Denny

33
Je ne pense pas que vous ayez besoin du LinearLayout externe.
Lawrence Kesteloot

1
@ Lawrence Non, ce n'est pas nécessaire, mais cela peut dépendre de l'apparence du reste de votre vue.
Bryan Denny

1
Si vous n'avez que Scrollview dans la présentation linéaire supérieure, vous obtenez l'avertissement "Cette disposition ScrollView ou son parent LinearLayout est inutile; transférez l'attribut d'arrière-plan à l'autre vue", ce qui signifie qu'il est inutile d'avoir une présentation linéaire avec un seul élément.
Niels

2
et certains avis d'importation: ScrollView ne doit avoir qu'un seul enfant
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

Cela peut être fait en utilisant la balise <ScrollView>. Pour ScrollView , une chose que vous devez rappeler, ScrollView doit avoir un seul enfant .

Si vous souhaitez que votre mise en page complète puisse défiler, ajoutez- <ScrollView>la en haut. Vérifiez l'exemple ci-dessous.

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

Mais si vous voulez qu'une partie de votre mise en page puisse défiler, ajoutez-la <ScrollView>dans cette partie. Vérifiez l'exemple ci-dessous.

<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

Voici comment je l'ai fait par essais et erreurs.

ScrollView - (the outer wrapper).

    LinearLayout (child-1).

        LinearLayout (child-1a).

        LinearLayout (child-1b).

Étant donné que ScrollView ne peut avoir qu'un seul enfant, cet enfant est une disposition linéaire. Ensuite, tous les autres types de disposition se produisent dans la première disposition linéaire. Je n'ai pas encore essayé d'inclure une disposition relative, mais ils me rendent fou donc j'attendrai le retour de ma raison.


Pourriez-vous corriger la mise en forme s'il vous plaît. Votre première ligne a été manquée dans la section du code et le site ne me laissera pas la corriger car elle est trop triviale.
Caltor

1

vous devez utiliser l'attribut suivant et l'enfermer dans la disposition linéaire

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

</scrollView>
</LinearLayout>

0

Vous devez placer ScrollView en tant que premier enfant du fichier de mise en page et maintenant y placer votre mise en page linéaire. Maintenant, Android décidera sur la base du contenu et de la taille de l'appareil disponible d'afficher ou non un défilement.

Assurez-vous que linearlayout n'a pas de frère car ScrollView ne peut pas avoir plus d'un enfant.


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

Vous pouvez ajouter un attribut dans linearLayout: android:scrollbars="vertical"


4
Cela contrôle la visibilité des barres de défilement uniquement. Mais cela ne crée pas une vue de défilement pour vous.
Botond Kopacz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.