Reputation: 61
I am trying to make my whole fragment scrollable vertically. I have implemented a horizontal scrollview and it works fine. The following is my xml file. I have tried implementing scrollview for the whole fragment but I get an error stating scrollview can only host one direct child. I am new to java so detailed answers would help.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragment_explore"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.explore.ExploreFragment">
<HorizontalScrollView
android:id="@+id/horizontalScrollView"
android:layout_width="406dp"
android:layout_height="217dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.108">
<GridLayout
android:layout_width="wrap_content"
android:layout_height="217dp"
android:layout_marginStart="1dp"
android:layout_marginLeft="1dp"
android:layout_marginTop="1dp"
android:layout_marginEnd="1dp"
android:layout_marginRight="1dp"
android:layout_marginBottom="1dp"
android:columnCount="5"
android:orientation="horizontal"
android:rowCount="2"
android:useDefaultMargins="true">
<Button
android:id="@+id/but1"
android:layout_width="100dp"
android:layout_height="100dp"
android:onClick="deviceList" />
<ImageButton
android:id="@+id/imageButton3"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/logo_apple" />
<ImageButton
android:id="@+id/imageButton4"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/logo_logitech" />
<ImageButton
android:id="@+id/imageButton5"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/logo_razer" />
<ImageButton
android:id="@+id/imageButton6"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/logo_samsung" />
</GridLayout>
</HorizontalScrollView>
<ScrollView
android:layout_width="412dp"
android:layout_height="280dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.996">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<GridLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnCount="1"
android:orientation="vertical"
android:rowCount="4">
<ImageButton
android:id="@+id/imageButton7"
android:layout_width="175dp"
android:layout_height="100dp"
android:background="@null"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:src="@drawable/icon_mp" />
<ImageButton
android:id="@+id/imageButton8"
android:layout_width="175dp"
android:layout_height="100dp"
android:background="@null"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:src="@drawable/icon_mp" />
<ImageButton
android:id="@+id/imageButton9"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/logo_samsung" />
<ImageButton
android:id="@+id/imageButton10"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/logo_samsung" />
<ImageButton
android:id="@+id/imageButton11"
android:layout_width="175dp"
android:layout_height="100dp"
android:background="@null"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:src="@drawable/icon_mp" />
<ImageButton
android:id="@+id/imageButton12"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/logo_samsung" />
</GridLayout>
</LinearLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
Upvotes: 0
Views: 47
Reputation: 1134
when you need multiple scroll views, use NestedScrollView.
I modified your code.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragment_explore"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<HorizontalScrollView
android:id="@+id/horizontalScrollView"
android:layout_width="match_parent"
android:layout_marginBottom="30dp"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/but1"
android:layout_width="100dp"
android:layout_height="100dp" />
<ImageButton
android:id="@+id/imageButton3"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/circle_red" />
<ImageButton
android:id="@+id/imageButton4"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/circle_red" />
<ImageButton
android:id="@+id/imageButton5"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/circle_red" />
<ImageButton
android:id="@+id/imageButton6"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/circle_red" />
</LinearLayout>
</HorizontalScrollView>
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<GridLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnCount="1"
android:orientation="vertical"
android:rowCount="8">
<ImageButton
android:id="@+id/imageButton7"
android:layout_width="175dp"
android:layout_height="100dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:background="@null"
android:src="@drawable/circle_red" />
<ImageButton
android:id="@+id/imageButton8"
android:layout_width="175dp"
android:layout_height="100dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:background="@null"
android:src="@drawable/circle_red" />
<ImageButton
android:id="@+id/imageButton9"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/circle_red" />
<ImageButton
android:id="@+id/imageButton10"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/circle_red" />
<ImageButton
android:id="@+id/imageButton11"
android:layout_width="175dp"
android:layout_height="100dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:background="@null"
android:src="@drawable/circle_red" />
<ImageButton
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/circle_red" />
<ImageButton
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/circle_red" />
<ImageButton
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/circle_red" />
<ImageButton
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/circle_red" />
<ImageButton
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/circle_red" />
<ImageButton
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/circle_red" />
<ImageButton
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/circle_red" />
</GridLayout>
</ScrollView>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
it make both scrollviews move smooth.
and please Do not use fixed size except when you really need. check this.
Upvotes: 1