#android #android-softkeyboard #bottomnavigationview
#Android #android-программная клавиатура #bottomnavigationview
Вопрос:
Я пытаюсь создать макет чата, поэтому у меня есть recyclerview с EditText (в котором используется фон с закругленным углом) и ImageButton для отправки сообщения, однако, когда появляется программная клавиатура, она покрывает небольшую часть EditText и ImageButton.
У меня android:windowSoftInputMode="adjustPan"
в моем AndroiManifest
Я пробовал:
- его использование
android:windowSoftInputMode="adjustResize
занимало все,BottomNavigationView
включая мое (чего я не хочу) - ввод
app:paddingBottomSystemWindowInsets="@{true}"
моего ConstraintLayout
Вот мой макет:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@ id/rv_support"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"
android:transcriptMode="alwaysScroll"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintBottom_toTopOf="@id/et_support"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:reverseLayout="true"
tools:itemCount="3"
tools:listitem="@layout/item_support_received" />
<androidx.appcompat.widget.AppCompatEditText
android:id="@ id/et_support"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/btn_support_send"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/rv_support"
/>
<com.google.android.material.button.MaterialButton
android:id="@ id/btn_support_send"
android:layout_width="50dp"
android:layout_height="50dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@id/et_support"
app:layout_constraintTop_toBottomOf="@id/rv_support" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
и ниже моих 2 изображений, показывающих проблему:
Ответ №1:
Я нашел обходной путь, сделав это:
- Я вернулся к
adjustPan
своему AndroidManifest - В моем фрагменте я добавил:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activity?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// Extension method I've created to hide/show the bottomNav
requireActivity().showBottomNavBar(false)
}
override fun onDestroyView() {
super.onDestroyView()
requireActivity().showBottomNavBar(true)
activity?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
}
Ответ №2:
Добавьте в свой recyclerview нижний отступ «16».
Ответ №3:
В моем случае у меня есть реализация, как показано ниже, в этом
-
добавлен вид прокрутки в файле макета
-
изменение тем приложений
<item name="android:windowSoftInputMode">adjustResize</item>
и файл макета как
<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:id="@ id/layout_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".activities.FirstActivity">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:fillViewport="true"
android:isScrollContainer="false"
app:layout_constraintBottom_toTopOf="@ id/layout_bottom"
app:layout_constraintTop_toBottomOf="@ id/layout_container">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1.7"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@ id/btn_get_started"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/ten_dp"
android:layout_weight="1"
android:background="@drawable/button_box"
android:backgroundTint="@color/button_color"
android:padding="@dimen/ten_dp"
android:text="Get Started" />
<Button
android:id="@ id/btn_sample_tour"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/ten_dp"
android:layout_weight="1"
android:background="@drawable/button_border"
android:padding="@dimen/ten_dp"
android:text="Sample Tour"
android:textColor="@color/primary_color" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/ten_dp"
android:background="@drawable/edit_text_box"
android:hint="Enter booking code"
android:maxLines="1"
android:minHeight="48dp"
android:padding="@dimen/five_dp"
android:textColorHint="#A1887F"
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
И это все, счастливого кодирования 🙂