andrewedgar
andrewedgar

Reputation: 877

Is there a way to scroll behind the keyboard on Android?

I have a screen with view that get affected when the soft keyboard appears, the entire white portion is in a ScrollView:

enter image description here

When I set the windowSoftInputMode to adjustPan in the manifest, the keyboard covers the save button, which can't be pressed until the keyboard is collapsed:

enter image description here

If I set it to adjustResize, the the views are all raised to overlap each other: enter image description here

In neither case does the screen scroll. What I would like is for all of the views to remain in their original positions, but allow the user to scroll to the bottom behind the keyboard, until the bottom of the screen below the save button is adjacent to the top of the open keyboard. Is this possible?

Edit: .xml layout:

   <ScrollView

        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"
        android:fillViewport="true"
>

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

        <LinearLayout

                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/white"
                android:orientation="vertical">


            <FrameLayout
                    android:id="@+id/paypalActionBar"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    android:background="@color/app_yellow_bold">

                <TextView
                        android:id="@+id/paypalToastContainer"
                        android:tag="paypal"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:layout_gravity="top"
                        android:background="@color/onboarding_button_blue"
                        android:elevation="1dp"
                        android:gravity="center"
                        android:orientation="horizontal"
                        android:paddingTop="30dp"
                        android:paddingBottom="5dp"
                        android:visibility="gone"
                        android:text="@string/payout_pay_pal_saved"
                        android:textColor="@color/white"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toTopOf="parent"
                        tools:visibility="gone">

                </TextView>

                <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:fontFamily="@font/radikal_bold"

                        android:paddingTop="50dp"
                        android:paddingBottom="30dp"
                        android:text="@string/payout_pay_pal_connect_title"
                        android:textColor="@color/black"
                        android:textSize="30sp"/>

                <com.weare8.android.ui.widgets.BackButton
                        android:id="@+id/pp_back"
                        android:layout_width="wrap_content"
                        android:layout_marginTop="20dp"
                        android:layout_height="match_parent"/>
            </FrameLayout>

            <ScrollView android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:fillViewport="true"
                        app:layout_constraintTop_toBottomOf="@+id/paypalActionBar">

                <FrameLayout
                        android:layout_width="match_parent"
                        android:layout_height="0dp"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintTop_toBottomOf="@+id/paypalActionBar" android:id="@+id/frameLayout4">

                    <RelativeLayout
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:paddingLeft="20dp"
                            android:paddingRight="20dp">

                        <androidx.appcompat.widget.AppCompatImageView
                                android:id="@+id/paypal_logo"
                                android:layout_width="252dp"
                                android:layout_height="67dp"
                                android:layout_alignParentStart="true"
                                android:layout_alignParentTop="true"
                                android:layout_marginTop="50dp"
                                android:src="@drawable/paypal_logo"/>

                        <TextView
                                android:id="@+id/paypalDescription"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_below="@+id/paypal_logo"
                                android:layout_marginTop="20dp"
                                android:layout_marginEnd="20dp"
                                android:fontFamily="@font/radikal"
                                android:lineSpacingMultiplier="1.2"
                                android:text="@string/payout_pay_pal_description"
                                android:textColor="@color/app_dark_gray"
                                android:textSize="16sp"/>

                        <TextView
                                android:id="@+id/paypalWarning"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_below="@+id/paypalDescription"
                                android:layout_marginTop="5dp"
                                android:layout_marginEnd="20dp"
                                android:fontFamily="@font/radikal"
                                android:lineSpacingMultiplier="1.2"
                                android:textStyle="italic"
                                android:text="@string/payout_pay_pal_payout_warning"
                                android:textColor="@color/app_light_gray"
                                android:textSize="14sp"/>

                        <LinearLayout
                                android:layout_width="match_parent"
                                android:layout_height="wrap_content"
                                android:layout_centerInParent="true"
                                android:orientation="vertical"
                        >


                            <EditText
                                    android:id="@+id/text_email"
                                    android:layout_width="match_parent"
                                    android:layout_height="wrap_content"
                                    android:background="@drawable/bg_edit_text"
                                    android:hint="@string/payout_pay_pal_email_hint"
                                    android:elevation="2dp"
                                    android:imeOptions="actionDone"
                                    android:inputType="textEmailAddress"
                                    android:fontFamily="@font/radikal"
                                    android:maxLines="1"
                                    android:layout_marginBottom="15dp"
                                    android:paddingTop="20dp"
                                    android:paddingBottom="20dp"
                                    android:paddingStart="20dp"
                                    android:textColor="@color/black"
                                    android:textSize="16sp"
                                    android:textColorHint="#8A8A8A"/>


                            <LinearLayout
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:orientation="horizontal">

                                <TextView
                                        android:id="@+id/text_dont_have_account"
                                        android:layout_width="wrap_content"
                                        android:layout_height="wrap_content"
                                        android:layout_marginStart="5dp"
                                        android:layout_marginEnd="3dp"
                                        android:fontFamily="@font/radikal"
                                        android:text="@string/payout_pay_pal_question"
                                        android:textColor="@color/app_dark_gray"
                                        android:textSize="14sp"/>

                                <TextView
                                        android:id="@+id/text_create_account"
                                        android:layout_width="wrap_content"
                                        android:layout_height="wrap_content"
                                        android:fontFamily="@font/radikal"
                                        android:textStyle="bold"
                                        android:textColor="@color/button_blue"
                                        android:textSize="14sp"/>


                            </LinearLayout>


                        </LinearLayout>

                    </RelativeLayout>

                    <TextView
                            android:id="@+id/saveButton"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_gravity="bottom"
                            android:background="@drawable/bg_button_blue_rounded"
                            android:layout_margin="25dp"
                            android:fontFamily="@font/radikal_bold"
                            android:gravity="center"
                            android:padding="20dp"
                            android:text="@string/payout_pay_pal_save"
                            android:textSize="16sp"
                            android:textColor="@color/white"/>

                </FrameLayout>

            </ScrollView>


        </LinearLayout>


    </androidx.constraintlayout.widget.ConstraintLayout>


</ScrollView>

Upvotes: 1

Views: 86

Answers (2)

Muhammad Ammar
Muhammad Ammar

Reputation: 556

If you want to scroll and save button also show in scrolling when soft keypad open, then you should have to move scroll view from white area to top of the view.

I have made a demo for you. try this one. I hope It might be helpful.

<!--If you your scroll view top of the layout it will resolve your problem-->
<ScrollView
    android:id="@+id/scroll_view"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        >

        <!--Toolbar demo-->
        <LinearLayout
            android:id="@+id/ll_toolbar"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:background="@color/teal_200"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            />

       
<!--        <ScrollView-->
<!--            android:id="@+id/scroll_view"-->
<!--            android:layout_width="match_parent"-->
<!--            android:layout_height="0dp"-->
<!--            app:layout_constraintStart_toStartOf="parent"-->
<!--            app:layout_constraintEnd_toEndOf="parent"-->
<!--            app:layout_constraintTop_toBottomOf="@+id/ll_toolbar"-->
<!--            >-->

        <!--Your white area of scroll which you want to scroll-->
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/white_portain"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/ll_toolbar"
            >

            <TextView
                android:id="@+id/tv_paypal_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="PayPal"
                android:layout_marginStart="20dp"
                android:layout_marginTop="30dp"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                android:textColor="@color/black"
                android:textSize="35dp"
                />

            <TextView
                android:id="@+id/tv_sub_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Connect your PayPal account to receive \n payments!"
                android:layout_marginStart="20dp"
                android:layout_marginTop="10dp"
                app:layout_constraintStart_toStartOf="parent"
                android:textColor="@color/black"
                android:textSize="18dp"
                app:layout_constraintTop_toBottomOf="@+id/tv_paypal_title"
                />

            <TextView
                android:id="@+id/tv_sub_2_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Please note:You must have a minimum balance of \n$1.00 to make a payout  via PayPal."
                android:layout_marginStart="20dp"
                android:layout_marginTop="10dp"
                app:layout_constraintStart_toStartOf="parent"
                android:textColor="@color/gray_600"
                android:textSize="15dp"
                app:layout_constraintTop_toBottomOf="@+id/tv_sub_title"
                />

            <EditText
                android:id="@+id/edit_email"
                android:layout_width="0dp"
                android:layout_marginTop="10dp"
                android:hint="Enter your email"
                android:paddingStart="10dp"
                android:textColorHint="@color/gray_600"
                android:layout_height="wrap_content"
                android:layout_marginEnd="20dp"
                app:layout_constraintTop_toBottomOf="@+id/tv_sub_2_title"
                app:layout_constraintStart_toStartOf="@+id/tv_sub_title"
                app:layout_constraintEnd_toEndOf="parent"
                />


            <TextView
                android:id="@+id/tv_create_one"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Dont have a PayPal account?"
                android:layout_marginStart="20dp"
                android:layout_marginTop="10dp"
                app:layout_constraintStart_toStartOf="@+id/edit_email"
                android:textColor="@color/gray_600"
                android:textSize="15dp"
                app:layout_constraintTop_toBottomOf="@+id/edit_email"
                />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Save"
                android:layout_marginTop="160dp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/tv_create_one" />

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


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

I follow your layout and try to fix it. now it's working as you want. if you get any trouble with this layout then i will happy to help you futher

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    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"
    >

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

        <LinearLayout
            android:id="@+id/ll_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/white"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:orientation="vertical">


            <FrameLayout
                android:id="@+id/paypalActionBar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                android:background="@color/teal_200">

                <TextView
                    android:id="@+id/paypalToastContainer"
                    android:tag="paypal"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="top"
                    android:background="@color/black"
                    android:elevation="1dp"
                    android:gravity="center"
                    android:orientation="horizontal"
                    android:paddingTop="30dp"
                    android:paddingBottom="5dp"
                    android:visibility="gone"
                    android:text="@string/payout_pay_pal_saved"
                    android:textColor="@color/white"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    tools:visibility="gone">

                </TextView>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:paddingTop="50dp"
                    android:paddingBottom="30dp"
                    android:text="@string/payout_pay_pal_connect_title"
                    android:textColor="@color/black"
                    android:textSize="30sp"/>

                <ImageView
                    android:id="@+id/pp_back"
                    android:background="@drawable/ic_launcher_background"
                    android:layout_width="wrap_content"
                    android:layout_marginTop="20dp"
                    android:layout_height="match_parent"/>
            </FrameLayout>
        </LinearLayout>

<!--            <ScrollView android:layout_width="match_parent"-->
<!--                android:layout_height="match_parent"-->
<!--                android:fillViewport="true"-->
<!--                app:layout_constraintTop_toBottomOf="@+id/paypalActionBar">-->

                <androidx.constraintlayout.widget.ConstraintLayout
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/ll_toolbar"
                    android:id="@+id/frameLayout4">

<!--                    <RelativeLayout-->
<!--                        android:layout_width="match_parent"-->
<!--                        android:layout_height="match_parent"-->
<!--                        android:paddingLeft="20dp"-->
<!--                        android:paddingRight="20dp">-->

                        <androidx.appcompat.widget.AppCompatImageView
                            android:id="@+id/paypal_logo"
                            android:layout_width="252dp"
                            android:layout_height="67dp"
                            android:layout_marginStart="20dp"
                            android:layout_marginTop="30dp"
                            app:layout_constraintTop_toTopOf="parent"
                            app:layout_constraintStart_toStartOf="parent"
                            android:background="@color/gray_600"/>

                        <TextView
                            android:id="@+id/paypalDescription"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_below="@+id/paypal_logo"
                            android:layout_marginTop="20dp"
                            android:layout_marginEnd="20dp"
                            app:layout_constraintTop_toBottomOf="@+id/paypal_logo"
                            app:layout_constraintStart_toStartOf="@+id/paypal_logo"
                            android:lineSpacingMultiplier="1.2"
                            android:text="@string/payout_pay_pal_description"
                            android:textColor="@color/gray_600"
                            android:textSize="16sp"/>

                        <TextView
                            android:id="@+id/paypalWarning"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_below="@+id/paypalDescription"
                            app:layout_constraintTop_toBottomOf="@+id/paypalDescription"
                            app:layout_constraintStart_toStartOf="@+id/paypalDescription"
                            android:layout_marginTop="5dp"
                            android:layout_marginEnd="20dp"
                            android:lineSpacingMultiplier="1.2"
                            android:textStyle="italic"
                            android:text="@string/payout_pay_pal_payout_warning"
                            android:textColor="@color/gray_600"
                            android:textSize="14sp"/>

                        <LinearLayout
                            android:id="@+id/ll_edittext"
                            app:layout_constraintTop_toBottomOf="@+id/paypalWarning"
                            app:layout_constraintStart_toStartOf="@+id/paypalDescription"
                            android:layout_width="match_parent"
                            android:layout_height="0dp"
                            android:layout_centerInParent="true"
                            android:orientation="vertical"
                            >


                            <EditText
                                android:id="@+id/text_email"
                                android:layout_width="match_parent"
                                android:layout_height="wrap_content"
                                android:hint="@string/payout_pay_pal_email_hint"
                                android:elevation="2dp"
                                android:imeOptions="actionDone"
                                android:inputType="textEmailAddress"
                                android:maxLines="1"
                                android:layout_marginBottom="15dp"
                                android:paddingTop="20dp"
                                android:paddingBottom="20dp"
                                android:paddingStart="20dp"
                                android:textColor="@color/black"
                                android:textSize="16sp"
                                android:textColorHint="#8A8A8A"/>


                            <LinearLayout
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:orientation="horizontal">

                                <TextView
                                    android:id="@+id/text_dont_have_account"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:layout_marginStart="5dp"
                                    android:layout_marginEnd="3dp"
                                    android:text="@string/payout_pay_pal_question"
                                    android:textColor="@color/black"
                                    android:textSize="14sp"/>

                                <TextView
                                    android:id="@+id/text_create_account"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:textStyle="bold"
                                    android:text="asd"
                                    android:textColor="@color/purple_700"
                                    android:textSize="14sp"/>


                            </LinearLayout>


                        </LinearLayout>

<!--                    </RelativeLayout>-->

                    <View
                        android:id="@+id/spacing"
                        android:layout_width="match_parent"
                        android:layout_height="100dp"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintTop_toBottomOf="@+id/ll_edittext"
                        />

                    <TextView
                        android:id="@+id/saveButton"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_gravity="bottom"
                        android:layout_margin="25dp"
                        android:background="@color/teal_200"
                        android:gravity="center"
                        android:padding="20dp"
                        android:text="@string/payout_pay_pal_save"
                        android:textColor="@color/white"
                        android:textSize="16sp"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintTop_toBottomOf="@+id/spacing"
                       />

                </androidx.constraintlayout.widget.ConstraintLayout>

<!--            </ScrollView>-->




    </androidx.constraintlayout.widget.ConstraintLayout>


</ScrollView>

Upvotes: 2

user14253444
user14253444

Reputation: 75

Try this...its working fine for me. Please change color names in this layout xml and their hex code in your values>.color .xml and also the string values to get desired results.

<?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"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:overScrollMode="never"
        tools:ignore="UnknownIdInLayout">
        <LinearLayout
            android:id="@+id/idLinear"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_gravity="center_horizontal"
            android:gravity="center"
            android:padding="5dp"
            app:layout_constraintTop_toBottomOf="@+id/idTopic"
            tools:ignore="MissingConstraints">
            <TextView

                android:layout_width="wrap_content"
                android:layout_height="150dp"
                android:layout_gravity="center"
                android:gravity="center|top"
                android:text="Your Text/nYourImage"
                android:padding="10dp"
                android:background="#00ffff"
                android:textColor="#66ff33"
                android:textSize="45sp"

                />
            <EditText
                android:id="@+id/idUser"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:digits="abcdefghijklmnopqrstuvwxyz.@1234567890_"
                android:inputType="textEmailAddress"
                android:imeOptions="actionDone"
                android:maxLength="40"
                android:hint="email"
                android:padding="10dp"
                android:gravity="center"
                android:layout_marginTop="15dp"
                android:textSize="15sp"
                android:background="#cccccc"
                />
            <EditText
                android:id="@+id/idPass"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textPassword"
                android:imeOptions="actionDone"
                android:hint="password"
                android:padding="10dp"
                android:gravity="center"
                android:layout_marginTop="15dp"
                android:textSize="15sp"
                android:autofillHints=""
                android:background="#cccccc"/>

            <Button
                android:id="@+id/idLogin"
                android:layout_width="wrap_content"
                android:minWidth="100dp"
                android:layout_height="40dp"
                android:text="login"
                android:textStyle="bold"
                android:textAllCaps="true"
                android:gravity="center"
                android:textSize="15sp"
                android:layout_marginTop="10dp"
                android:paddingStart="10dp"
                android:paddingEnd="10dp"
                android:background="#ffff00"
                android:textColor="#ffffff"
                />

            <Button
                android:id="@+id/idReset"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:text="forgot"
                android:textAllCaps="true"
                android:gravity="center"
                android:textSize="15sp"
                android:layout_marginTop="30dp"
                android:paddingStart="10dp"
                android:paddingEnd="10dp"
                android:background="#ffff00"
                android:textColor="#ffffff"
                />

            <Button
                android:id="@+id/idSignup"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:text="sign up"
                android:textAllCaps="true"
                android:gravity="center"
                android:textSize="15sp"
                android:layout_marginTop="30dp"
                android:paddingStart="10dp"
                android:paddingEnd="10dp"
                android:background="#ffff00"
                android:textColor="#ffffff"
                 />

        </LinearLayout>
    </ScrollView>

</androidx.constraintlayout.widget.ConstraintLayout>

Upvotes: 0

Related Questions