Android: RelativeLayout в ScrollView
У меня есть RelativeLayout
с несколькими ImageView
и когда я поворачиваюсь по экрану, ImageView
становится неупорядоченным. Поэтому я решил превратить его в 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>
Ответы
Ответ 1
Я столкнулся с той же проблемой с Relative Layout в Scroll View, чтобы преодолеть это, я обернул вокруг своего относительного макета линейным макетом, попробуйте сделать это, а также удалите ориентацию из относительного макета
<?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>
Ответ 2
Простое решение, просто добавьте android: fillViewport = "true" в Scrollview, например:
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<RelativeLayout ....... />
</ScrollView>
Ответ 3
Когда вы используете ScrollView, вы должны знать, что вы можете прокручивать, когда высота ScrollView меньше высоты дочернего элемента ScrollView.
Чтобы решить эту проблему, вы можете определить Height LinearLayout для match_parent, который является единственным дочерним элементом ScrollView. Затем определите высоту ScrollView в коде Java, например scrollView.getChildAt(0).getHeight() - 1;
, чтобы убедиться, что высота ScrollView меньше высоты дочернего элемента ScrollView.
Для вашего собственного ответа это не очень хороший способ использовать магические числа в вашем коде, например 427dp и 548dp.
Ответ 4
Я мог бы решить свой вопрос с помощью уважаемого Рави и немного изменить:
код выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ScrollView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="none" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="427dp" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="548dp" >
<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>