Android Material ModalBottomSheet отображает странное заполнение в верхней части листа

#android #kotlin #modal-dialog #material-design

#Android #kotlin #модальный диалог #материал-дизайн

Вопрос:

У меня возникла странная проблема при реализации Material Design ModalBottomSheet в одном из наших приложений в соответствии с документацией Material Design.

https://material.io/components/sheets-bottom/android#using-bottom-sheets

Я создал фрагмент и сопутствующее представление, как описано. В основном действии у меня есть кнопка, которая добавляет фрагмент в FragmentManager по щелчку. Когда я запускаю модальный нижний лист, я получаю заполнение в верхней части листа. Фон отображается правильно и ведет себя так, как ожидалось. Когда я полностью разворачиваю лист и меняю его обратно на полуоткрытый, отступ исчезает.

Я добавил красный цвет к внешнему описанию CoordinatorLayout, чтобы визуализировать проблему:

ModalBottomSheet (STATE_COLLAPSED) с заполнением вверху

modal_bottom_sheet.xml:

 <?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="@color/color_error"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@ id/standardBottomSheet"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        style="?attr/bottomSheetStyle"
        app:layout_behavior="@string/bottom_sheet_behavior">

        <View
            android:id="@ id/slideView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="16dp" />

        <TextView
            android:id="@ id/textView"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:text="Bottom Sheet"
            android:gravity="center" />

    </FrameLayout>

</androidx.coordinatorlayout.widget.CoordinatorLayout>
 

ModalBottomSheet.kt

 import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.os.bundleOf
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.ricknout.mdctheming.R

class ModalBottomSheet : BottomSheetDialogFragment() {

    private var dismissWithAnimation = false

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? = inflater.inflate(R.layout.modal_bottom_sheet, container, false)

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        dismissWithAnimation = arguments?.getBoolean(ARG_DISMISS_WITH_ANIMATION) ?: false
        (requireDialog() as BottomSheetDialog).dismissWithAnimation = dismissWithAnimation
    }

    companion object {
        const val TAG = "ModalBottomSheet"
        private const val ARG_DISMISS_WITH_ANIMATION = "dismiss_with_animation"
        fun newInstance(dismissWithAnimation: Boolean): ModalBottomSheet {
            val modalBottomSheet = ModalBottomSheet()
            modalBottomSheet.arguments = bundleOf(ARG_DISMISS_WITH_ANIMATION to dismissWithAnimation)
            return modalBottomSheet
        }
    }
}
 

BottomSheetActivity.kt:

 ...
private fun showModalBottomSheet() {
    val modalBottomSheet = ModalBottomSheet.newInstance(modalDismissWithAnimation)
    modalBottomSheet.show(supportFragmentManager, ModalBottomSheet.TAG)
}
...
 

Комментарии:

1. Возможно, вам захочется вставить фрагменты кода для кода фрагмента bottomsheet и xml плюс соответствующие дополнения, написанные