web-dev-qa-db-fra.com

Android ScrollView fillViewport ne fonctionne pas

J'ai une mise en page simple avec un nom en haut et un bouton que je veux être en bas de l'écran, ou au-delà au cas où j'ajouterais d'autres éléments.

J'utilise donc un ScrollView avec un LinearLayout comme suit:

<ScrollView 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:background="@Android:color/white"
Android:fillViewport="true"
Android:focusableInTouchMode="true"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
tools:context=".ItemDetailActivity" >

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="vertical" >

    <!-- Name -->

    <RelativeLayout
        Android:id="@+id/top_content"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_gravity="top" >

        <TextView
            Android:id="@+id/name_label"
            style="@style/Header_Label_TextView"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:text="@string/name" />

        <TextView
            Android:id="@+id/name_value"
            style="@style/Value_Label_TextView"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:layout_below="@id/name_label" />
    </RelativeLayout>

    <!-- button -->

    <RelativeLayout
        Android:id="@+id/ButtonLayout"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_gravity="bottom" >

        <Button
            Android:id="@+id/add_button"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:layout_marginTop="10sp"
            Android:onClick="editItem"
            Android:text="@string/button_edit" />
    </RelativeLayout>

    <requestFocus />
</LinearLayout>

Voici ce que j'obtiens:

Result of the layout XML

Comment puis-je faire en sorte que le bouton apparaisse en bas de l'écran ou au-delà. Lors de la recherche en ligne, la plupart des réponses consistaient à définir `Android: fillViewport =" true ", mais cela n'aide pas. Qu'est-ce que je fais mal?

14
rgamber

Modifiez la disposition de vos boutons comme ceci:

 <RelativeLayout
    Android:id="@+id/ButtonLayout"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:gravity="bottom" >

    <Button
        Android:id="@+id/add_button"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginTop="10sp"
        Android:onClick="editItem"
        Android:layout_alignParentBottom="true"
        Android:text="@string/button_edit" />
</RelativeLayout>
5
user755

Cela devrait fonctionner -

  1. Utilisez la disposition relative en tant qu'enfant pour la vue de défilement.
  2. Ensemble layout_alignParentBottom = true pour le bouton.

Exemple XML

<ScrollView 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:background="@Android:color/white"
Android:fillViewport="true"
Android:focusableInTouchMode="true"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
tools:context=".ItemDetailActivity" >

<RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical" >

    <!-- Name -->

    <RelativeLayout
        Android:id="@+id/top_content"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_gravity="top" >

        <TextView
            Android:id="@+id/name_label"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:text="Name" />

        <TextView
            Android:id="@+id/name_value"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:layout_below="@id/name_label" />
    </RelativeLayout>

    <!-- button -->

    <RelativeLayout
        Android:id="@+id/ButtonLayout"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true" >

        <Button
            Android:id="@+id/add_button"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:layout_marginTop="10sp"
            Android:onClick="editItem"
            Android:text="Edit" />
    </RelativeLayout>
</RelativeLayout>

</ScrollView>
3
Anukool

En mode défilement, utilisez RelativeLayout au lieu de LinearLayout et définissez votre propriété de vue inférieure

Android:layout_alignParentBottom="true"
1
Krunal Shah

Si vous utilisez LinearLayout (qui est plus performant que RelativeLayout), vous devez définir Android:gravity="bottom" & Android:layout_height="match_parent" comme ça:

<LinearLayout
    Android:id="@+id/ButtonLayout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical"
    Android:gravity="bottom" >

    <Button
        Android:id="@+id/add_button"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginTop="10sp"
        Android:onClick="editItem"
        Android:text="@string/button_edit" />
</LinearLayout>

Référence: https://demonuts.com/Android-fillviewport/

0
Aba