Search code examples
androidxmlandroid-layoutandroid-constraintlayoutandroid-scrollview

Why is scrollview hiding buttons behind other views?


I have a bunch of buttons in a scrollview and then below the scrollview is a horizontal linear layout with some buttons for controls and then below that is an Ad Mob banner ad. I can't seem to figure out why when I scroll to the bottom of the list of buttons, approximately half of the last row of buttons are hidden behind the controls and banner ad. Can anybody tell me how to make it scroll to show the full bottom row of buttons so they aren't hidden behind the linear layout for the controls and the ad banner?

Here is a screenshot:

enter image description here

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ScrollView
        android:id="@+id/scrollView2"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:fillViewport="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Button
                android:id="@+id/button"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:text="Button 1"
                app:layout_constraintDimensionRatio="H,1:1"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toLeftOf="@+id/button2"
                app:layout_constraintTop_toTopOf="parent" />

            <Button
                android:id="@+id/button2"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:text="Button 2"
                app:layout_constraintDimensionRatio="H,1:1"
                app:layout_constraintLeft_toRightOf="@+id/button"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

            <Button
                android:id="@+id/button3"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:text="Button 3"

                app:layout_constraintDimensionRatio="H,1:1"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toLeftOf="@+id/button2"
                app:layout_constraintTop_toBottomOf="@id/button" />

            <Button
                android:id="@+id/button4"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:text="Button 4"
                app:layout_constraintDimensionRatio="H,1:1"
                app:layout_constraintLeft_toRightOf="@+id/button"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@id/button2" />

            <Button
                android:id="@+id/button5"
                android:layout_width="0dp"
                android:layout_height="0dp"

                android:text=" Button 5"
                app:layout_constraintDimensionRatio="H,1:1"
                app:layout_constraintHorizontal_bias="1.0"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toLeftOf="@+id/button2"
                app:layout_constraintTop_toBottomOf="@+id/button3" />

            <Button
                android:id="@+id/button6"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:text="Button 6"
                app:layout_constraintDimensionRatio="H,1:1"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintLeft_toRightOf="@+id/button"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/button4" />

            <Button
                android:id="@+id/button7"
                android:layout_width="0dp"
                android:layout_height="0dp"

                android:text=" Button 7"
                app:layout_constraintDimensionRatio="H,1:1"
                app:layout_constraintHorizontal_bias="1.0"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toLeftOf="@+id/button8"
                app:layout_constraintTop_toBottomOf="@+id/button5" />

            <Button
                android:id="@+id/button8"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:text="Button 8"
                app:layout_constraintDimensionRatio="H,1:1"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintLeft_toRightOf="@+id/button"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/button6" />

            <Button
                android:id="@+id/button9"
                android:layout_width="0dp"
                android:layout_height="0dp"

                android:text=" Button 9"
                app:layout_constraintDimensionRatio="H,1:1"
                app:layout_constraintHorizontal_bias="1.0"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toLeftOf="@+id/button10"
                app:layout_constraintTop_toBottomOf="@+id/button7" />

            <Button
                android:id="@+id/button10"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:text="Button 10"
                app:layout_constraintDimensionRatio="H,1:1"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintLeft_toRightOf="@+id/button"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/button8" />

            <Button
                android:id="@+id/button11"
                android:layout_width="0dp"
                android:layout_height="0dp"

                android:text=" Button 11"
                app:layout_constraintDimensionRatio="H,1:1"
                app:layout_constraintHorizontal_bias="1.0"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toLeftOf="@+id/button12"
                app:layout_constraintTop_toBottomOf="@+id/button9" />

            <Button
                android:id="@+id/button12"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:text="Button 12"
                app:layout_constraintDimensionRatio="H,1:1"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintLeft_toRightOf="@+id/button"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/button10" />

            <Button
                android:id="@+id/button13"
                android:layout_width="0dp"
                android:layout_height="0dp"

                android:text=" Button 13"
                app:layout_constraintDimensionRatio="H,1:1"
                app:layout_constraintHorizontal_bias="1.0"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toLeftOf="@+id/button14"
                app:layout_constraintTop_toBottomOf="@+id/button11" />

            <Button
                android:id="@+id/button14"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:text="Button 14"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintDimensionRatio="H,1:1"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintLeft_toRightOf="@+id/button"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/button12" />

            <androidx.constraintlayout.widget.Guideline
                android:id="@+id/guideline"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                app:layout_constraintGuide_begin="87dp" />


        </androidx.constraintlayout.widget.ConstraintLayout>
    </ScrollView>

    <LinearLayout
        android:id="@+id/controlslayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#000000"
        app:layout_constraintBottom_toTopOf="@+id/adView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent">

        <Button
            android:id="@+id/play"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Play/Pause" />

        <Button
            android:id="@+id/timer"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Timer" />

        <Button
            android:id="@+id/volume"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Volume" />
    </LinearLayout>

    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        app:adSize="SMART_BANNER"
        app:adUnitId="ca-app-pub-3940256099942544/6300978111"
        app:layout_constraintBottom_toBottomOf="@+id/scrollView2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"></com.google.android.gms.ads.AdView>
</androidx.constraintlayout.widget.ConstraintLayout>

The bottom row of buttons should be fully visible when scrolled down and not hidden behind the other views.


Solution

  • app:layout_constraintBottom_toBottomOf="parent" in your ScrollView needs to be app:layout_constraintBottom_toTopOf="@+id/controlslayout". Currently, your list is filling the entire screen, and the buttons are drawn over it.

    Also, there isn't much point using ConstraintLayout if you're going to nest ViewGroups like this.