複数のRelativeLayout
sを持つImageView
があり、画面を回転させると、ImageView
sが乱れます。そこで、それをScrollView
にラップすることにしました。しかし、ScrollView
は機能しません!
誰もそれで私を助けることができますか? GridView
またはListView
を設計するのが正しい方法であることは知っていますが、いくつか質問があり、誰も答えてくれなかったので、この方法で行くことにしました。
ここに私のxmlコードがあります:
<?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>
私はこれを克服するためにスクロールビュー内の相対レイアウトで同じ問題を経験しました。線形レイアウトで相対レイアウトをラップし、このようにして、相対レイアウトから方向を削除します
<?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>
シンプルなソリューション、次のようにAndroid:fillViewport = "true"をScrollviewに追加するだけです:
<ScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fillViewport="true">
<RelativeLayout ....... />
</ScrollView>
ScrollViewを使用する場合、ScrollViewの高さがScrollViewの子の高さよりも小さい場合にのみスクロールできることを知っておく必要があります。
この問題を解決するには、LinearLayoutのHeightを、ScrollViewの唯一の子であるmatch_parentに定義します。次に、JavaコードでscrollView.getChildAt(0).getHeight() - 1;
のようにScrollViewの高さを定義して、ScrollViewの高さがScrollViewの子の高さよりも小さくなるようにします。
あなた自身の答えとして、427dpや548dpのように、コードでマジックナンバーを使用するのは良い方法ではありません。