386 votes

LinearLayout ne pas en expansion à l’intérieur d’un ScrollView

J'ai un LinearLayout à l'intérieur d'un ScrollView qui a android:layout_height="fill_parent", mais il ne s'étend pas sur toute la hauteur de l' ScrollView. Ma mise en page ressemble à quelque chose comme:

level    layout    layout_width    layout_height
1    LinearLayout    fill_parent    fill_parent
2    LinearLayout    fill_parent    wrap_content
3    (some irrelevant stuff)
2    ScrollView      fill_parent    fill_parent <-- this expands full height
3    LinearLayout    fill_parent    fill_parent <-- this does not (has orientation=vertical)
(following stuff probably are irrelevant, but just to be sure:)
4    TextView        fill_parent    fill_parent
4    LinearLayout    fill_parent    wrap_content

Je peux voir que l' LinearLayout ne s'étend pas sur toute la hauteur de l' ScrollView parce que dans Eclipse en Android Layout Editor, si je sélectionne l' ScrollView (dans le panneau plan), il est mis en évidence avec une bordure rouge qui remplit l'écran vers le bas, mais lorsque je sélectionne l' LinearLayout son point culminant ne pas s'étendre vers le bas de l'écran. Comment puis-je l'obtenir?

L'effet, je suis en train de réaliser est d'avoir un peu de texte et un bouton en dessous (à l'intérieur de l' LinearLayout au niveau 4 il y a juste un bouton). Le texte peut être assez grand pour le besoin d'une barre de défilement, dans ce cas, je veux à l'utilisateur d'avoir à faire défiler vers le bas pour voir le bouton. Dans le cas où le texte n'est pas assez grand pour une barre de défilement, je veux de l' LinearLayout contenant le bouton pour coller au bas de l'écran.

Au début, je pensais que je ne devrais pas publier XML, car il est généralement un tour vers le bas pour voir un énorme morceau de code en question. Cependant, il semble qu'il pourrait être nécessaire, alors, voici la mise en page complète.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:id="@+id/video_layout"
        android:focusable="true"
        style="@style/VideoLayout">
        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:foreground="@android:drawable/ic_media_play"
            android:foregroundGravity="center">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/video_thumb"
                android:padding="5dip"
                android:background="#454545"/>
        </FrameLayout>
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:focusable="true"
            style="@style/VideoTitle"
            android:id="@+id/video_title"
            android:layout_gravity="center"
            android:layout_weight="1"/>
    </LinearLayout>
    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1">
        <!-- this ScrollView expands the full height of the screen.
             However, the next LinearLayout does not expand the full height of the ScrollView -->
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:layout_gravity="fill"
            android:orientation="vertical"
            android:id="@+id/info_layout">
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/info_body"
                style="@style/InfoText"/>
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                style="@android:style/ButtonBar">
                    <Button
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:layout_weight="1"
                        android:text="@string/button_readmore"
                        android:id="@+id/btn_read_more"/>
            </LinearLayout>
        </LinearLayout>
    </ScrollView>
</LinearLayout>

Pour le moment j'ai eu recours à l' android:layout_gravity="bottom" sur la problématique LinearLayout, ce qui rend le bouton de coller au fond de l'écran, peu importe quoi. Mais qui fait aussi le texte bâton vers le bas de l'écran, ce qui n'est pas exactement ce que je recherchais.

Mise à jour: scratch, android:layout_gravity="bottom" fait l' ScrollView l'impossibilité de le faire bien, faire défiler. D'autres idées?

994voto

Felix Points 33944

La solution me suis retrouvé en fin de compte. Le problème n’était pas avec le , mais avec la (semble étrange, compte tenu du fait que le **était** en expansion, tandis que le n’a pas été).

La solution était d’utiliser sur le .

10voto

snctln Points 8687

Pouvez-vous fournir votre mise en page xml? Cela permettrait à des gens de recréer le problème avec un minimum d'effort.

Vous pourriez avoir à définir

android:layout_weight="1"

pour l'élément que vous souhaitez élargi

2voto

Braj Points 11

J'ai dynamiquement utilisé pour obtenir cette . J'ai un LinearLayout et dans ce ScrollView comme un enfant. Puis-je prendre de nouveau LinearLayout et ajouter ce que jamais Vue u veux ce LinearLayout et puis ce LinearLayout ajouter à la ScrollView et enfin ajouter cette ScrollView à LinearLayout. Alors u peut obtenir de défilement dans ur le ScrollView et rien ne sera laissé visible.

LinearLayout(Parent)--le ScrollView(enfant de LinerLayout) -- LinearLayout(enfant de la ScrollView)-- ajout d'ici textView, Boutons , spinner, etc ce que tu veux . Ajoutez ensuite cette LinearLyout à ScrollView. Bcoz un seul ENFANT pour le ScrollView applicables et en dernier ajouter cette ScrollView à LinearLyout.Si la zone définie est supérieure à partir de la taille de l'Écran alors u sera d'obtenir un Défilement dans le ScrollView.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X