web-dev-qa-db-fra.com

Android: RelativeLayout dans ScrollView

J'ai un RelativeLayout avec plusieurs ImageViews et quand je tourne autour de l'écran, les ImageViews deviennent désordonnés. J'ai donc décidé de l'envelopper dans un ScrollView. Mais le ScrollView ne fonctionne pas!

Est-ce que quelqu'un peut m'aider avec cela? Je sais que la bonne façon est de concevoir un GridView ou ListView, mais comme j'avais des questions et que personne ne m'a répondu, j'ai décidé de suivre cette voie.

Voici mon xml code:

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

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

    <Button
        Android:id="@+id/continuePizza"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true"
        Android:layout_alignParentRight="true"
        Android:text="continue" />

    <Button
        Android:id="@+id/finishP"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_above="@+id/continuePizza"
        Android:layout_alignParentLeft="true"
        Android:text="finish" />

    <ImageView
        Android:id="@+id/imageView1"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentLeft="true"
        Android:layout_alignParentTop="true"
        Android:layout_marginTop="16dp"
        Android:src="@drawable/download" />

    <ImageView
        Android:id="@+id/imageView2"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignTop="@+id/imageView1"
        Android:layout_marginLeft="18dp"
        Android:layout_toRightOf="@+id/imageView1"
        Android:src="@drawable/download" />

    <ImageView
        Android:id="@+id/imageView3"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_below="@+id/imageView1"
        Android:layout_marginTop="18dp"
        Android:src="@drawable/download" />

    <ImageView
        Android:id="@+id/imageView5"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignLeft="@+id/imageView3"
        Android:layout_centerVertical="true"
        Android:src="@drawable/download" />

    <ImageView
        Android:id="@+id/imageView6"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignTop="@+id/imageView3"
        Android:src="@drawable/download" />

    <ImageView
        Android:id="@+id/imageView4"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_below="@+id/imageView5"
        Android:layout_marginTop="17dp"
        Android:src="@drawable/download" />

    <ImageView
        Android:id="@+id/imageView7"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignLeft="@+id/imageView2"
        Android:layout_alignTop="@+id/imageView5"
        Android:layout_marginLeft="10dp"
        Android:src="@drawable/download" />

    <ImageView
        Android:id="@+id/imageView8"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignLeft="@+id/imageView7"
        Android:layout_alignTop="@+id/imageView3"
        Android:src="@drawable/download" />

</RelativeLayout>
</ScrollView>
27
eng.m.a

J'ai rencontré le même problème avec la mise en page relative dans la vue de défilement pour surmonter ce problème.

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


<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/ScrollView01"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fillViewport="true"
Android:scrollbars="none" >

<LinearLayout Android:layout_width="match_parent"
Android:layout_height="match_parent">


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


<Button
    Android:id="@+id/continuePizza"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:layout_alignParentBottom="true"
    Android:layout_alignParentRight="true"
    Android:text="continue" />

<Button
    Android:id="@+id/finishP"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:layout_above="@+id/continuePizza"
    Android:layout_alignParentLeft="true"
    Android:text="finish" />

<ImageView
    Android:id="@+id/imageView1"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignParentLeft="true"
    Android:layout_alignParentTop="true"
    Android:layout_marginTop="16dp"
    Android:src="@drawable/download" />

<ImageView
    Android:id="@+id/imageView2"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignTop="@+id/imageView1"
    Android:layout_marginLeft="18dp"
    Android:layout_toRightOf="@+id/imageView1"
    Android:src="@drawable/download" />

<ImageView
    Android:id="@+id/imageView3"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_below="@+id/imageView1"
    Android:layout_marginTop="18dp"
    Android:src="@drawable/download" />

<ImageView
    Android:id="@+id/imageView5"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignLeft="@+id/imageView3"
    Android:layout_centerVertical="true"
    Android:src="@drawable/download" />

<ImageView
    Android:id="@+id/imageView6"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignTop="@+id/imageView3"
    Android:src="@drawable/download" />

<ImageView
    Android:id="@+id/imageView4"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_below="@+id/imageView5"
    Android:layout_marginTop="17dp"
    Android:src="@drawable/download" />

<ImageView
    Android:id="@+id/imageView7"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignLeft="@+id/imageView2"
    Android:layout_alignTop="@+id/imageView5"
    Android:layout_marginLeft="10dp"
    Android:src="@drawable/download" />
<ImageView
    Android:id="@+id/imageView8"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignLeft="@+id/imageView7"
    Android:layout_alignTop="@+id/imageView3"
    Android:src="@drawable/download" />

</RelativeLayout>
</LinearLayout>
</ScrollView>
25
Ravi

Solution simple, ajoutez simplement Android: fillViewport = "true" à Scrollview comme:

<ScrollView 
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fillViewport="true">

<RelativeLayout ....... />

</ScrollView>
30
Divyang Panchal

Lorsque vous utilisez ScrollView, vous devez savoir que vous ne pouvez faire défiler que lorsque la hauteur de ScrollView est inférieure à la hauteur de l'enfant de ScrollView.
Pour résoudre ce problème, vous pouvez définir la hauteur de LinearLayout à match_parent, qui est le seul enfant de ScrollView. Définissez ensuite la hauteur de ScrollView dans le code Java, comme scrollView.getChildAt(0).getHeight() - 1; pour vous assurer que la hauteur de ScrollView est inférieure à la hauteur de l'enfant de ScrollView.
Pour votre propre réponse, ce n'est pas un bon moyen d'utiliser des nombres magiques dans votre code, comme 427dp et 548dp.

1
Daniel Mi