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?

Troj
la source
4
doublon possible de Comment faire un LinearLayout scrollable
Narkha

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.

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

Patrick Murphy
la source
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>
Esprit d'ingénieur
la source
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.

Tulsi
la source
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
la source
-27

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

alishan
la source
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