Search code examples
androidandroid-recyclerviewchatandroid-softkeyboard

Android soft keyboard hides RecyclerView


I'm trying to make a comments/chat layout with a RecyclerView and a fixed EditText at the bottom. Please don't say adjustPan or adjustResize. Does not work. adjustPan hides the keyboard.

I really need help with this, it's getting really frustrating

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/appbarlayout"
        android:paddingTop="@dimen/app_bar_top_padding">

        <android.support.v7.widget.Toolbar
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:theme="@style/ThemeOverlay.AppCompat.ActionBar"
            android:id="@+id/toolbar"
            app:titleTextColor="#FFFFFF" />

    </android.support.design.widget.AppBarLayout>


    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/recycler_view"
        android:layout_below="@+id/appbarlayout"
        android:isScrollContainer="false"
        android:stackFromBottom="true"
        android:transcriptMode="normal"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#2b2b2b"
        android:orientation="vertical"
        android:id="@+id/chat_box"
        android:layout_alignParentBottom="true">

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="?android:attr/listDivider"/>

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="16dp">

            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:hint="Skriv en kommentar"
                android:background="@android:color/transparent"
                android:textColor="@color/white"
                android:textColorHint="#d4d4d4"
                android:inputType="textCapSentences|textMultiLine"
                android:layout_marginRight="40dp"/>

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_send"
                android:background="@drawable/click"
                android:layout_gravity="right|center_vertical" />

        </FrameLayout>

    </LinearLayout>


</RelativeLayout>


Solution

  • The correct answer is adjustResize, so the app is resized above the keyboard. However for that to work the rest of your layout needs to be written to be resizable. Yours isn't, as the recycler view isn't fixed in place. Add in a layout_above="@+id/chatBox" constraint on it so it lays out above the edit text, and it should resize to fit the space properly.

    Also, adjustPan doesn't hide the keyboard. If it does, you have something really wrong in your code. adjustPan slides your app up without resizing. Which may be what you want, if you can find out what in your app is hiding the keyboard.