【问题标题】:Android Keyboard covers edittext under recyclerViewAndroid Keyboard 覆盖recyclerView下的edittext
【发布时间】:2021-01-24 12:09:39
【问题描述】:
<?xml version="1.0" encoding="utf-8"?>
<layout 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">

<data>

    <variable
        name="viewModel"
        type="app.redtaxi.client.views.chat.ChatViewModel" />
</data>

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

    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        android:isScrollContainer="true"
        android:scrollbars="none">


        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/lesser_white"
            android:gravity="bottom"
            android:paddingTop="25dp"
            tools:context=".views.chat.ChatActivity">


            <RelativeLayout
                android:layout_width="42dp"
                android:layout_height="42dp"
                android:layout_alignParentStart="true"
                android:layout_alignParentTop="true"
                android:layout_marginStart="10dp"
                android:layout_marginTop="10dp"
                android:layout_marginBottom="16dp"
                android:background="@drawable/round_shape"
                android:clickable="true"
                android:elevation="4dp"
                android:focusable="true"
                android:onClick="@{() -> viewModel.onBackBtnClicked()}">

                <ImageView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_centerInParent="true"
                    android:padding="10dp"
                    android:src="@drawable/ic_back_arrow" />

            </RelativeLayout>


            <ImageView
                android:layout_width="42dp"
                android:layout_height="42dp"
                android:layout_alignParentTop="true"
                android:layout_alignParentEnd="true"
                android:layout_marginTop="10dp"
                android:layout_marginEnd="10dp"
                android:layout_marginBottom="16dp"
                android:background="@drawable/round_shape"
                android:clickable="true"
                android:elevation="4dp"
                android:focusable="true"
                android:onClick="@{() -> viewModel.onCallBtnClicked()}"
                android:src="@drawable/ic_call_black" />


            <TextView
                android:id="@+id/chat_title_tv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="20dp"
                android:text="Mr. Samer Saadeh"
                android:textColor="@color/black"
                android:textSize="18sp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/chat_car_tv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/chat_title_tv"
                android:layout_centerHorizontal="true"
                android:text="17 - White Hyundai"
                android:textColor="@color/text_gray"
                android:textSize="14sp"
                android:textStyle="bold" />


            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/chat_recyclerView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_above="@id/chat_layout"
                android:layout_below="@id/chat_car_tv"
                android:layout_marginTop="5dp"
                tools:itemCount="15"
                tools:listitem="@layout/item_chat" />

            <LinearLayout
                android:id="@+id/chat_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="45dp"
                android:orientation="horizontal"
                android:paddingStart="15dp"
                android:paddingEnd="15dp">

                <com.google.android.material.card.MaterialCardView
                    android:id="@+id/chat_cv"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_weight="0.9"
                    android:elevation="5dp"
                    android:theme="@style/Theme.MaterialComponents.Light"
                    app:cardCornerRadius="30dp"
                    app:strokeColor="@color/gray_light"
                    app:strokeWidth="0.5dp">

                    <androidx.constraintlayout.widget.ConstraintLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:background="@color/white"
                        android:padding="10dp">

                        <com.google.android.material.textfield.TextInputEditText
                            android:id="@+id/chat_et"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:background="@null"
                            android:ems="11"
                            android:hint="@string/type_a_message"
                            android:singleLine="true"
                            android:textColor="@color/text_black"
                            android:textColorHint="@color/hint_gray"
                            app:layout_constraintBottom_toBottomOf="parent"
                            app:layout_constraintStart_toStartOf="parent"
                            app:layout_constraintTop_toTopOf="parent"
                            app:layout_constraintWidth_percent="0.7" />

                        <ImageView
                            android:id="@+id/chat_attach_iv"
                            android:layout_width="20dp"
                            android:layout_height="20dp"
                            android:layout_marginEnd="10dp"
                            android:clickable="true"
                            android:focusable="true"
                            android:src="@drawable/ic_attach"
                            app:layout_constraintBottom_toBottomOf="parent"
                            app:layout_constraintEnd_toStartOf="@id/chat_camera_iv"
                            app:layout_constraintTop_toTopOf="parent" />

                        <ImageView
                            android:id="@+id/chat_camera_iv"
                            android:layout_width="20dp"
                            android:layout_height="20dp"
                            android:layout_marginEnd="15dp"
                            android:clickable="true"
                            android:focusable="true"
                            android:src="@drawable/ic_camera"
                            app:layout_constraintBottom_toBottomOf="parent"
                            app:layout_constraintEnd_toEndOf="parent"
                            app:layout_constraintTop_toTopOf="parent" />

                    </androidx.constraintlayout.widget.ConstraintLayout>
                </com.google.android.material.card.MaterialCardView>

                <ImageView
                    android:id="@+id/chat_record_iv"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:clickable="true"
                    android:focusable="true"
                    android:src="@drawable/ic_mic_btn" />

            </LinearLayout>


        </RelativeLayout>
    </androidx.core.widget.NestedScrollView>
</RelativeLayout>

这是我在主题中将 windowFullscreen 设置为 false 的活动的 XML 文件,我在清单中尝试了 adjustResize 和 adjustPan,我尝试通过代码设置它,我也尝试使用和不使用键盘始终覆盖的 outRelativeLayout recyclerView 和 editText 随时向我询问其他代码

Image showing the UI

【问题讨论】:

    标签: android android-recyclerview android-edittext


    【解决方案1】:

    你可以试试这个吗?从 NestedScrollView 中删除包含 TextInputEditText 的线性布局,并将 windowSoftInputMode 设置为 adjustResize,如下所示:

    在清单文件中:

     android:windowSoftInputMode="adjustResize"
    

    和这样的布局文件:

    <?xml version="1.0" encoding="utf-8"?>
    <layout 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">
    
    <data>
    
        <variable
            name="viewModel"
            type="app.redtaxi.client.views.chat.ChatViewModel" />
    </data>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">
    
        <androidx.core.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fillViewport="true"
            android:isScrollContainer="true"
            android:scrollbars="none">
    
    
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/lesser_white"
                android:gravity="bottom"
                android:paddingTop="25dp"
                tools:context=".views.chat.ChatActivity">
    
    
                <RelativeLayout
                    android:layout_width="42dp"
                    android:layout_height="42dp"
                    android:layout_alignParentStart="true"
                    android:layout_alignParentTop="true"
                    android:layout_marginStart="10dp"
                    android:layout_marginTop="10dp"
                    android:layout_marginBottom="16dp"
                    android:background="@drawable/round_shape"
                    android:clickable="true"
                    android:elevation="4dp"
                    android:focusable="true"
                    android:onClick="@{() -> viewModel.onBackBtnClicked()}">
    
                    <ImageView
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_centerInParent="true"
                        android:padding="10dp"
                        android:src="@drawable/ic_back_arrow" />
    
                </RelativeLayout>
    
    
                <ImageView
                    android:layout_width="42dp"
                    android:layout_height="42dp"
                    android:layout_alignParentTop="true"
                    android:layout_alignParentEnd="true"
                    android:layout_marginTop="10dp"
                    android:layout_marginEnd="10dp"
                    android:layout_marginBottom="16dp"
                    android:background="@drawable/round_shape"
                    android:clickable="true"
                    android:elevation="4dp"
                    android:focusable="true"
                    android:onClick="@{() -> viewModel.onCallBtnClicked()}"
                    android:src="@drawable/ic_call_black" />
    
    
                <TextView
                    android:id="@+id/chat_title_tv"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentTop="true"
                    android:layout_centerHorizontal="true"
                    android:layout_marginTop="20dp"
                    android:text="Mr. Samer Saadeh"
                    android:textColor="@color/black"
                    android:textSize="18sp"
                    android:textStyle="bold" />
    
                <TextView
                    android:id="@+id/chat_car_tv"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/chat_title_tv"
                    android:layout_centerHorizontal="true"
                    android:text="17 - White Hyundai"
                    android:textColor="@color/text_gray"
                    android:textSize="14sp"
                    android:textStyle="bold" />
    
    
                <androidx.recyclerview.widget.RecyclerView
                    android:id="@+id/chat_recyclerView"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_above="@id/chat_layout"
                    android:layout_below="@id/chat_car_tv"
                    android:layout_marginTop="5dp"
                    tools:itemCount="15"
                    tools:listitem="@layout/item_chat" />
    
            </RelativeLayout>
        </androidx.core.widget.NestedScrollView>
    
     <LinearLayout
                    android:id="@+id/chat_layout"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentBottom="true"
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="45dp"
                    android:orientation="horizontal"
                    android:paddingStart="15dp"
                    android:paddingEnd="15dp">
    
                    <com.google.android.material.card.MaterialCardView
                        android:id="@+id/chat_cv"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:layout_weight="0.9"
                        android:elevation="5dp"
                        android:theme="@style/Theme.MaterialComponents.Light"
                        app:cardCornerRadius="30dp"
                        app:strokeColor="@color/gray_light"
                        app:strokeWidth="0.5dp">
    
                        <androidx.constraintlayout.widget.ConstraintLayout
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:background="@color/white"
                            android:padding="10dp">
    
                            <com.google.android.material.textfield.TextInputEditText
                                android:id="@+id/chat_et"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:background="@null"
                                android:ems="11"
                                android:hint="@string/type_a_message"
                                android:singleLine="true"
                                android:textColor="@color/text_black"
                                android:textColorHint="@color/hint_gray"
                                app:layout_constraintBottom_toBottomOf="parent"
                                app:layout_constraintStart_toStartOf="parent"
                                app:layout_constraintTop_toTopOf="parent"
                                app:layout_constraintWidth_percent="0.7" />
    
                            <ImageView
                                android:id="@+id/chat_attach_iv"
                                android:layout_width="20dp"
                                android:layout_height="20dp"
                                android:layout_marginEnd="10dp"
                                android:clickable="true"
                                android:focusable="true"
                                android:src="@drawable/ic_attach"
                                app:layout_constraintBottom_toBottomOf="parent"
                                app:layout_constraintEnd_toStartOf="@id/chat_camera_iv"
                                app:layout_constraintTop_toTopOf="parent" />
    
                            <ImageView
                                android:id="@+id/chat_camera_iv"
                                android:layout_width="20dp"
                                android:layout_height="20dp"
                                android:layout_marginEnd="15dp"
                                android:clickable="true"
                                android:focusable="true"
                                android:src="@drawable/ic_camera"
                                app:layout_constraintBottom_toBottomOf="parent"
                                app:layout_constraintEnd_toEndOf="parent"
                                app:layout_constraintTop_toTopOf="parent" />
    
                        </androidx.constraintlayout.widget.ConstraintLayout>
                    </com.google.android.material.card.MaterialCardView>
    
                    <ImageView
                        android:id="@+id/chat_record_iv"
                        android:layout_width="50dp"
                        android:layout_height="50dp"
                        android:clickable="true"
                        android:focusable="true"
                        android:src="@drawable/ic_mic_btn" />
    
                </LinearLayout>
    </RelativeLayout>
    

    【讨论】:

    • 从 android manifest (y) android:windowSoftInputMode="adjustResize"
    • 如果你问为什么 adjustResize 解决了这个问题,你可以查看这个链接 Android adjust Resize 这是在 android manifest 中设置时 adjustResize 的作用。它允许 Activity 的主窗口始终调整大小,以便为屏幕上的软键盘腾出空间。
    • 在嵌套滚动视图下有 recyclerview 是不好的,因为你失去了回收视图。
    猜你喜欢
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    相关资源
    最近更新 更多