J'ai un RelativeLayout
avec plusieurs ImageView
s et quand je tourne autour de l'écran, les ImageView
s 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>
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>
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>
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.