#android #android-fragments #android-edittext #keyboard-events #bottom-sheet
#Android #android-фрагменты #android-edittext #клавиатура-события #нижний лист
Вопрос:
У меня есть BottomSheetDialogFragment, в котором простой файл макета с edittext внизу и recyclerview сверху, когда пользователь нажимает на edittext, и открывается программная клавиатура, и пишет несколько строк в edittext и пытается прокрутить его, во время прокрутки, если я нажимаю на любую строку, edittext сжимается сам, а также BottomSheetDialogFragment дергается, как будто он сам рендерится.
Вот мой код
layout_file:
<RelativeLayout
android:id="@ id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
android:orientation="vertical"
app:behavior_hideable="true"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior">
<android.support.v4.widget.SwipeRefreshLayout
android:id="@ id/swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@ id/etPostShare">
<android.support.v7.widget.RecyclerView
android:id="@ id/rvNewMessage"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.v4.widget.SwipeRefreshLayout>
<EditText
android:id="@ id/etPostShare"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:background="@null"
android:gravity="center|left"
android:hint="Aa"
android:inputType="textCapSentences|textMultiLine"
android:isScrollContainer="true"
android:maxHeight="60dp"
android:maxLength="@integer/send_chat_txt_limit"
android:maxLines="4"
android:paddingLeft="18.4dp"
android:paddingBottom="10dp"
android:textSize="14.6sp" />
</RelativeLayout>
Здесь я прикрепил изображения, а также ссылку на видео по моей проблеме:
https://drive.google.com/file/d/1bADuzDQoWep8XPMQ4ypKCWJyD32Gtfwp/view?usp=sharing
Комментарии:
1. Пожалуйста, попробуйте заставить ваш ресайклер просматривать содержимое по высоте
2. дайте мне знать, помогает это вам или нет.
3. Не работает @AbhishekBhardwaj
4. swiperefreshlayout и recylerview оба должны иметь свойство wrap_content для height
5. Это не работает, потому что эта кнопка должна отображаться внизу, а recyclerview должен быть поверх кнопки @Jileshl
Ответ №1:
У меня точно такая же проблема. Надеюсь, это работает 🙂
style.xml
<style name="DialogStyle" parent="Theme.Design.Light.BottomSheetDialog">
<item name="android:windowIsFloating">false</item>
<item name="android:windowSoftInputMode">adjustResize</item>
</style>
в вашем BottomSheetDialogFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogStyle)
}
в вашем макете
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="bottom"
android:orientation="vertical">
.... your content with EditText
</androidx.core.widget.NestedScrollView>
Ответ №2:
Это работает в режиме предварительного просмотра
<RelativeLayout
android:id="@ id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_red_light"
android:orientation="vertical"
app:behavior_hideable="true"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior">
<android.support.v4.widget.SwipeRefreshLayout
android:id="@ id/swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@ id/rvNewMessage"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.v4.widget.SwipeRefreshLayout>
<EditText
android:id="@ id/etPostShare"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:background="@null"
android:gravity="center|left"
android:layout_alignParentBottom="true"
android:hint="Aanaa"
android:inputType="textCapSentences|textMultiLine"
android:isScrollContainer="true"
android:maxHeight="60dp"
android:maxLength="500"
android:maxLines="4"
android:paddingLeft="18.4dp"
android:paddingBottom="10dp"
android:textSize="14.6sp" />
</RelativeLayout>
Комментарии:
1. Я попробовал ваше решение, но оно снова сжимается при прокрутке в edittext, а затем пользователь нажимает на редактирование любого конкретного символа в edittext.
2. Для меня работает тот же приведенный выше XML; Я вижу, что Edittext плавает над Recyclerview максимум с 4 строками @AsadMukhtar
3. Я знаю, что это выше, но я думаю, что вы не внимательно прочитали вопрос из-за того, что в поведении диалогового окна нижнего листа edittext сжимается.
4. Понял; решение, приведенное выше, я попытался запустить его в своем проекте с поведением макета как bottomsheetbehavior, и оно не уменьшает edittext; Протестировал его на Android 6; Причина, по которой это работает, заключается в том, что; SwipeRefreshLayout не зависит от Edittext для его положения (ваш XML говорит, что ** android: layout_above =»@ id / etPostShare», В то время как вышеупомянутое решение использует относительную конфигурацию макета для отображения в на дне