web-dev-qa-db-ja.com

Android:ScrollViewのRelativeLayout

複数のRelativeLayoutsを持つImageViewがあり、画面を回転させると、ImageViewsが乱れます。そこで、それを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>
27
eng.m.a

私はこれを克服するためにスクロールビュー内の相対レイアウトで同じ問題を経験しました。線形レイアウトで相対レイアウトをラップし、このようにして、相対レイアウトから方向を削除します

<?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

シンプルなソリューション、次のようにAndroid:fillViewport = "true"をScrollviewに追加するだけです:

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

<RelativeLayout ....... />

</ScrollView>
30
Divyang Panchal

ScrollViewを使用する場合、ScrollViewの高さがScrollViewの子の高さよりも小さい場合にのみスクロールできることを知っておく必要があります。
この問題を解決するには、LinearLayoutのHeightを、ScrollViewの唯一の子であるmatch_parentに定義します。次に、JavaコードでscrollView.getChildAt(0).getHeight() - 1;のようにScrollViewの高さを定義して、ScrollViewの高さがScrollViewの子の高さよりも小さくなるようにします。
あなた自身の答えとして、427dpや548dpのように、コードでマジックナンバーを使用するのは良い方法ではありません。

1
Daniel Mi