web-dev-qa-db-fra.com

Android ScrollView et boutons en bas de l'écran

Je veux implémenter ceci: un ScrollView qui contient de nombreux éléments (ImageViews, TextViews, EditTexts, etc.), puis après le ScrollView quelques boutons (qui sont des ImageViews personnalisées) qui apparaissent toujours exactement au bas de l'écran.

Si j'utilise l'attribut Android: fillViewport = "true", alors si les éléments du ScrollView sont trop grands pour tenir dans la taille de l'écran, les boutons deviennent invisibles. Si j'utilise l'attribut Android: Weight = 1, le ScrollView n'obtient que 50% de l'écran lorsque l'écran est grand et qu'il peut tenir (je veux que les boutons prennent un petit pourcentage, environ 10%). Si je règle Android: Weight sur des valeurs plus grandes, les boutons apparaissent très petits.

Veuillez aider! C'est peut-être quelque chose de simple que j'ai négligé, mais je me tape la tête depuis des heures!

36
george

Je viens de le créer et de le tester. On dirait que tu veux.

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent">

    <LinearLayout
            Android:id="@+id/buttons"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:orientation="horizontal"
            Android:gravity="center"
            Android:layout_alignParentBottom="true">
        <Button
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="Custom Button1"/>
        <Button
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="Custom Button2"/>
    </LinearLayout>

    <ScrollView
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:layout_above="@id/buttons">
         <!--Scrollable content here-->
        <LinearLayout
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:orientation="vertical">                
            <TextView
                    Android:layout_height="wrap_content"
                    Android:layout_width="wrap_content"
                    Android:text="test text"
                    Android:textSize="40dp"/>
        </LinearLayout>
    </ScrollView>

</RelativeLayout>
84
Aleksey Masny
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical">
    <ScrollView
        Android:layout_width="match_parent"
        Android:layout_height="0dp"
        Android:layout_weight="1">
        <LinearLayout
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:orientation="vertical">
            <TextView 
             Android:layout_width="wrap_content"
             Android:layout_height="wrap_content"
             Android:text="Hello World"
            />
            <TextView 
             Android:layout_width="wrap_content"
             Android:layout_height="wrap_content"
             Android:text="Hallo Welt"
            />       
        </LinearLayout>
    </ScrollView>
    <RelativeLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_weight="0">
        <Button
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="Go next page"
            Android:layout_alignParentRight="true" />
    </RelativeLayout>

</LinearLayout>
9
macio.Jun

Cela a fonctionné pour moi. Donnez à la vue de défilement un poids de 1. Placez tous les autres widgets suivant la vue de défilement dans une disposition. La vue de défilement augmentera suffisamment pour ne pas bloquer le reste.

Widgets en mode défilement et reste en bas

3
HarisankarK

scrollview ne peut pas s'adapter à l'écran parce que vous le mettez sur une disposition linéaire, donc la disposition linéaire tient dans l'écran,

essayez juste de faire scrollview en tant que root elemen sur la mise en page xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/scrollView1"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content" >

    <LinearLayout
        Android:id="@+id/linearLayout1"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content" >
        <!-- Here you can put some XML stuff and BOOM! your screen fit to scrollview -->

    </LinearLayout>
</ScrollView>
2
kechvp

Si vous ne souhaitez pas utiliser RelativeLayout , il est préférable d'utiliser LinearLayout . Cette méthode est meilleure à mon avis.

Définissez simplement le layout_weight sur un

enter image description here

0
gadolf