EditText выставить под RecyclerView при появлении клавиатуры
Не могу заставить двигаться RecyclerView вверх при появлении клавиатуры при этом чтобы список был на весь экран если в нем мало элементов(чтобы клавиатура была под списком при появлении клавиатуры). Сейчас при появлении клавиатуры и EditTexta, EditText нахдится поверх RecyclerView. Как иметь RecyclerView на весь экран но при этом если показывается EditText и клавиатура RecyclerView был выше клавиатуры и EditTexta
<?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"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toTopOf="@id/editText1"
android:scrollbars="vertical" />
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/recyclerView"
android:hint="@string/add_item"
app:layout_constraintBottom_toBottomOf="@id/container"
android:background="@color/green"
android:textColor="@color/black"
android:visibility="visible"
android:saveEnabled="true"
android:inputType="text" >
<requestFocus />
</EditText>
Manifest.xml
<activity
android:name=".MainActivity"
android:windowSoftInputMode="adjustResize"
android:label="test">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Ответы (2 шт):
Данная проблема решается простым добавлением в манифест строки:
android:windowSoftInputMode="adjustResize"
Эту строку нужно добавить в активность в которой находится ваш список. Вот похожий вопрос.
Придется прокручивать лист программного, для этого использовать scrollToPosition
recyclerView.scrollToPosition(myListData.size - 1)
К сожалению
android:windowSoftInputMode="adjustResize"
не работает с RecyclerView как ожидается/хочется.
А если еще динамически появлется и исчезает EditText и его нужно отображать под RecyclerView нужно программно добавлять и убирать marginBottom EditTexta
recyclerView.layoutParams = (recyclerView.layoutParams as ConstraintLayout.LayoutParams).apply {
bottomMargin = resources.getDimensionPixelSize(R.dimen.edit_text_size)
}
В случае если editText показывается по действия какой либо кнопки можно использовать
editText.height
вместо
resources.getDimensionPixelSize(R.dimen.edit_text_size)
так как UI уже отрисован и размер известен во время изменения marginBottom
Если editText начинает показывать сразу при открытии активити, размер можно добавить в resource и использовать общее значение либо брать размер после отрисовки UI