Search code examples
androidandroid-layoutandroid-edittextscrollviewandroid-softkeyboard

How to scroll an EditText to the very top of the layout?


So I have this layout with some ChipsInput inside a scrollview and I simply want these to go to the very top when the keyboard is activated

I've tried to change windowSoftInputMode to adjustPan and others but it does not make it to go to the very top, just doesn't cover it.

Here's my xml layout

<LinearLayout 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/constraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background1"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical">

<LinearLayout
    android:id="@+id/layoutImage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"
    android:background="@color/colorPrimary"
    android:elevation="12dp"
    android:orientation="horizontal"
    android:padding="10dp"
    tools:targetApi="lollipop">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_margin="3dp"
        android:layout_weight="1"
        android:fontFamily="@font/quattrocento"
        android:gravity="left"
        android:text="@string/profile"
        android:textSize="20sp"
        android:textStyle="bold"
        android:textColor="@color/textColor1"
        tools:ignore="RtlHardcoded" />

    <ImageButton
        android:id="@+id/btUpdate"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="3"
        android:background="@color/colorPrimary"
        android:src="@drawable/arrow_right_icon" />

</LinearLayout>

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="5dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginHorizontal="5dp"
        android:orientation="vertical"
        tools:targetApi="o">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:fontFamily="@font/quattrocento"
            android:gravity="center"
            android:text="@string/gallery"
            android:textSize="22sp"
            android:textStyle="bold"
            android:textColor="@color/textColor2"/>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:orientation="horizontal"
            android:padding="5dp"
            android:baselineAligned="false">

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1">

                <ImageButton
                    android:id="@+id/close1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/icon_close"
                    android:background="@color/white"
                    android:layout_alignParentTop="true"
                    android:layout_alignParentEnd="true"
                    android:layout_alignParentRight="true"
                    android:elevation="7dp"
                    android:visibility="invisible"/>

                <ImageButton
                    android:id="@+id/add1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/icon_add"
                    android:background="@color/white"
                    android:layout_alignParentBottom="true"
                    android:layout_alignParentEnd="true"
                    android:layout_alignParentRight="true"
                    android:elevation="7dp"/>

                <ImageView
                    android:id="@+id/photo1"
                    android:layout_width="match_parent"
                    android:layout_height="115dp"
                    android:layout_marginHorizontal="5dp"
                    android:background="@drawable/rounded_rect_primary_dark"
                    android:elevation="5dp"
                    android:scaleType="fitXY"/>
            </RelativeLayout>

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1">

                <ImageButton
                    android:id="@+id/close2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/icon_close"
                    android:background="@color/white"
                    android:layout_alignParentTop="true"
                    android:layout_alignParentEnd="true"
                    android:layout_alignParentRight="true"
                    android:elevation="7dp"
                    android:visibility="invisible"/>

                <ImageButton
                    android:id="@+id/add2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/icon_add"
                    android:background="@color/white"
                    android:layout_alignParentBottom="true"
                    android:layout_alignParentEnd="true"
                    android:layout_alignParentRight="true"
                    android:elevation="7dp"/>

                <ImageView
                    android:id="@+id/photo2"
                    android:layout_width="match_parent"
                    android:layout_height="115dp"
                    android:layout_marginHorizontal="5dp"
                    android:background="@drawable/rounded_rect_primary_dark"
                    android:elevation="5dp"
                    android:scaleType="fitXY" />
            </RelativeLayout>

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1">

                <ImageButton
                    android:id="@+id/close3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/icon_close"
                    android:background="@color/white"
                    android:layout_alignParentTop="true"
                    android:layout_alignParentEnd="true"
                    android:layout_alignParentRight="true"
                    android:elevation="7dp"
                    android:visibility="invisible"/>

                <ImageButton
                    android:id="@+id/add3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/icon_add"
                    android:background="@color/white"
                    android:layout_alignParentBottom="true"
                    android:layout_alignParentEnd="true"
                    android:layout_alignParentRight="true"
                    android:elevation="7dp"/>

                <ImageView
                    android:id="@+id/photo3"
                    android:layout_width="match_parent"
                    android:layout_height="115dp"
                    android:layout_marginHorizontal="5dp"
                    android:background="@drawable/rounded_rect_primary_dark"
                    android:elevation="5dp"
                    android:scaleType="fitXY"/>
            </RelativeLayout>

        </LinearLayout>

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_marginHorizontal="12dp"
            android:layout_marginVertical="5dp"
            android:background="@color/black" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginLeft="10dp"
            android:layout_marginStart="10dp">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:fontFamily="@font/quattrocento"
                android:text="@string/about_me"
                android:textColor="@color/textColor2"
                android:textSize="20sp" />

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

                <EditText
                    android:id="@+id/description"
                    android:layout_width="match_parent"
                    android:layout_height="70dp"
                    android:background="@color/white"
                    android:focusable="true"
                    android:maxLength="500"
                    android:inputType="text"
                    android:importantForAutofill="no"
                    android:autofillHints="no"
                    tools:ignore="LabelFor" />

                <TextView
                    android:id="@+id/caracCounter"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:fontFamily="@font/quattrocento"
                    android:text="500"
                    android:textColor="@color/black"
                    android:textSize="16sp"
                    android:layout_gravity="end" />
            </LinearLayout>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_gravity="center"
            android:gravity="center"
            android:layout_marginLeft="10dp"
            android:layout_marginStart="10dp"
            android:layout_marginTop="10dp">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:fontFamily="@font/quattrocento"
                android:text="@string/interest1"
                android:textColor="@color/textColor2"
                android:textSize="20sp"
                android:layout_gravity="center"
                android:gravity="center"/>

            <Spinner
                android:id="@+id/categories1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:gravity="center"
                android:background="@color/colorPrimary" />
        </LinearLayout>

        <com.pchmn.materialchips.ChipsInput
            android:id="@+id/chipsInput1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:background="@color/white"
            android:elevation="3dp"
            android:focusable="false"
            app:chip_deletable="true"
            app:chip_hasAvatarIcon="false"
            app:hint="#"
            app:chip_backgroundColor="@color/colorPrimary"
            app:chip_deleteIconColor="@color/black"
            app:chip_labelColor="@color/black"/>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_gravity="center"
            android:gravity="center"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:layout_marginStart="10dp">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:fontFamily="@font/quattrocento"
                android:text="@string/interest2"
                android:textColor="@color/textColor2"
                android:textSize="20sp"
                android:layout_gravity="center"
                android:gravity="center"/>

            <Spinner
                android:id="@+id/categories2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:gravity="center"
                android:background="@color/colorPrimary" />
        </LinearLayout>


        <com.pchmn.materialchips.ChipsInput
            android:id="@+id/chipsInput2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:background="@color/white"
            android:elevation="3dp"
            android:focusable="false"
            app:chip_deletable="true"
            app:chip_hasAvatarIcon="false"
            app:hint="#"
            app:chip_backgroundColor="@color/colorPrimary"
            app:chip_deleteIconColor="@color/black"
            app:chip_labelColor="@color/black" />

        <Button
            android:id="@+id/btLogout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:layout_margin="25dp"
            android:background="@color/colorPrimary"
            android:elevation="12dp"
            android:fontFamily="@font/quattrocento"
            android:text="@string/logout"
            android:textSize="20sp"
            android:onClick="logout"
            tools:targetApi="lollipop"
            android:textColor="@color/black"/>
    </LinearLayout>
</ScrollView>

I simply need it to be sent to the very top of the layout so my filterable list will appear when the user start to type.


Solution

  • You can use CoordinatorLayout as your root and NestedScrolView in it .

    CoordinatorLayout as root reacts to keyboard and scrolls your layout to the top of your phone with assistant of NestedScrollView which your NestedScrollView includes your layout code .

    To put the issue into perspective view

    CoordinaterLayout > NestedScrolView > yourLayout

    Change your layout XMl like code below

    <android.support.design.widget.CoordinatorLayout
        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.support.v4.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <LinearLayout
                android:id="@+id/constraintLayout"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/background1"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:orientation="vertical">
            <!-- rest of your layout xml code-->
    
        </android.support.v4.widget.NestedScrollView>
    </android.support.design.widget.CoordinatorLayout>