web-dev-qa-db-fra.com

Comment ajouter des barres de défilement à un LinearLayout dans Android?

Comment ajouter des barres de défilement à une vue dans Android?

J'ai essayé en ajoutant Android:scrollbars:"vertical" au LinearLayout dans mon fichier XML de mise en page mais cela ne fonctionne pas.

Je pensais que les barres de défilement étaient dessinées par défaut dans Android mais cela ne semble pas ainsi. Il semble que nous devons les dessiner nous-mêmes - comment faire?

18
Angel

Vous ne pouvez pas ajouter de barres de défilement à un LinearLayout car il ne s'agit pas d'un conteneur pouvant défiler.

Seuls les conteneurs déroulants tels que ScrollView, HorizontalScrollView, ListView, GridView, ExpandableListView affichent des barres de défilement.

Je vous suggère de placer votre LinearLayout à l'intérieur d'un ScrollView qui affichera par défaut des barres de défilement verticales s'il y a suffisamment de contenu pour faire défiler.

<ScrollView
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    >

    <LinearLayout
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        >

        <!-- Your content goes here -->   

    </LinearLayout>
</ScrollView>

Si vous souhaitez que la barre de défilement verticale soit toujours affichée, ajoutez Android:scrollbarAlwaysDrawVerticalTrack="true" à votre ScrollView. Notez que la hauteur de LinearLayout est définie sur wrap_content - cela signifie que la hauteur du LinearLayout peut être supérieure à celle du ScrollView s'il y a suffisamment de contenu - dans ce cas, vous pourrez faire défiler votre LinearLayout haut et bas.

50
Joseph Earl

Vous ne pouvez pas ajouter une barre de défilement à un widget de cette façon. Vous pouvez envelopper votre widget dans un ScrollView. Voici un exemple simple:

<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content">
    <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:orientation="vertical"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent">
        <TextView
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:id="@+id/txt"/>
    </LinearLayout>
</ScrollView>

Si vous voulez le faire en code:

ScrollView sv = new ScrollView(this);
//Add your widget as a child of the ScrollView.
sv.addView(wView);
11
rajath