FragmentContainerView, который не сжимает внутри себя Fragment под свои размеры
Всем привет! Кто-нибудь знает, как сделать, чтобы FragmentContainerView не сжимал Fragment под свои размеры, а отображал только некоторую часть этого Fragment?
Конкретнее: У меня есть bottomSheet:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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/bottom_sheet"
android:layout_width="match_parent"
android:layout_marginStart="@dimen/bottomsheet_layout_side_margin"
android:layout_marginEnd="@dimen/bottomsheet_layout_side_margin"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
app:behavior_hideable="false"
android:background="@drawable/bottom_sheet_bg"
app:behavior_peekHeight="30dp">
<ImageView
android:id="@+id/iv_drag_handle"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_weight="1"
android:background="@drawable/bottom_sheet_bg"
android:paddingTop="10dp"
android:paddingBottom="10dp"
app:srcCompat="@drawable/ic_drag_handle_horizontal" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/bottom_sheet_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:paddingTop="0dp" >
</androidx.fragment.app.FragmentContainerView>
</LinearLayout>
Этот bottomSheet увеличивается и сжимается в ширину посредством изменения margin'ов:
Разметка фрагмента, изображенного на 2 картинке:
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:transitionName="@string/transitionName"
app:layout_constraintBaseline_toBaselineOf="parent">
<Button
android:id="@+id/btn_abort_order"
style="@style/ButtonStyle.BottomSheetButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="@string/reset_order"
android:theme="@style/RedButtonTheme"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_car_color" />
<TextView
android:id="@+id/tv_label_waiting_time"
style="@style/TextViewLabelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/label_waiting_time"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/imageView"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_label_station_name"
style="@style/TextViewLabelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:text="@string/label_driver_meet_point"
app:layout_constraintEnd_toEndOf="@+id/btn_abort_order"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/tv_label_driver"
app:layout_constraintTop_toBottomOf="@+id/tv_waiting_time" />
<TextView
android:id="@+id/tv_label_driver"
style="@style/TextViewLabelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:text="@string/label_driver_name"
app:layout_constraintEnd_toStartOf="@+id/tv_driver_name"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="@+id/tv_label_car"
app:layout_constraintTop_toBottomOf="@+id/tv_meet_point" />
<TextView
android:id="@+id/tv_label_car"
style="@style/TextViewLabelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/label_car_type"
app:layout_constraintEnd_toStartOf="@+id/tv_car_type"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="@+id/tv_label_car_number"
app:layout_constraintTop_toBottomOf="@+id/tv_driver_name" />
<TextView
android:id="@+id/tv_label_car_number"
style="@style/TextViewLabelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/label_car_number"
app:layout_constraintEnd_toStartOf="@+id/tv_car_number"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="@+id/tv_label_car_color"
app:layout_constraintTop_toBottomOf="@+id/tv_car_type" />
<TextView
android:id="@+id/tv_label_car_color"
style="@style/TextViewLabelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/label_car_color"
app:layout_constraintEnd_toStartOf="@+id/tv_car_color"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="@+id/btn_abort_order"
app:layout_constraintTop_toBottomOf="@+id/tv_car_number" />
<TextView
android:id="@+id/tv_car_color"
style="@style/DriverDataBoldBottomSheetText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="7dp"
android:maxWidth="310dp"
android:text="Синий"
app:layout_constraintEnd_toEndOf="@+id/btn_abort_order"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/tv_label_car_color"
app:layout_constraintTop_toTopOf="@+id/tv_label_car_color" />
<TextView
android:id="@+id/tv_car_number"
style="@style/DriverDataBoldBottomSheetText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="7dp"
android:maxWidth="293dp"
android:text="С 777 УК 159"
app:layout_constraintEnd_toEndOf="@+id/btn_abort_order"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/tv_label_car_number"
app:layout_constraintTop_toTopOf="@+id/tv_label_car_number" />
<TextView
android:id="@+id/tv_car_type"
style="@style/DriverDataNormalBottomSheetText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="7dp"
android:maxWidth="250dp"
android:text="Лада Приора"
app:layout_constraintEnd_toEndOf="@+id/btn_abort_order"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/tv_label_car"
app:layout_constraintTop_toTopOf="@+id/tv_label_car" />
<TextView
android:id="@+id/tv_driver_name"
style="@style/DriverDataNormalBottomSheetText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="7dp"
android:minWidth="100dp"
android:text="Очень-очень длинные имя фамилия и отчество, которые занимают очень много места"
app:layout_constraintEnd_toEndOf="@+id/btn_abort_order"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/tv_label_driver"
app:layout_constraintTop_toTopOf="@+id/tv_label_driver" />
<TextView
android:id="@+id/tv_meet_point"
style="@style/DriverDataBoldBottomSheetText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:maxWidth="352dp"
android:text="«Кинотеатр Октябрь»"
app:layout_constraintEnd_toEndOf="@+id/btn_abort_order"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/tv_label_driver"
app:layout_constraintTop_toBottomOf="@+id/tv_label_station_name" />
<TextView
android:id="@+id/tv_waiting_time"
style="@style/DriverDataBoldBottomSheetText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="17 минут."
android:textSize="30sp"
app:layout_constraintEnd_toEndOf="@+id/btn_abort_order"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/imageView"
app:layout_constraintTop_toTopOf="@+id/imageView" />
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
app:layout_constraintEnd_toStartOf="@+id/tv_waiting_time"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="@+id/tv_label_station_name"
app:layout_constraintTop_toBottomOf="@+id/tv_label_waiting_time"
app:srcCompat="@drawable/ic_clock" />
</androidx.constraintlayout.widget.ConstraintLayout>
Проблема заключается в том, что из-за того, что я хочу использовать 0dp как ширину у textView с ФИО водителя (tv_driver_name), то, когда я резко поднимаю bottomSheet, то получается следующее:
Т.е. добавляется отступ снизу у моего bottomSheet. Эмпирически я понял, что это именно из-за 0dp у textView, и, как причину могу предположить, что это из-за того, что мой текст расширяется в ширину и уменьшается в высоту, а мой FragmentContainer, возможно, не успевает это отследить вовремя и получается вот так всё. Поэтому я хотел сделать так, чтобы ширина моего фрагмента была изначально равной ширине всего экрана, и FragmentContainerView не сжимал бы мой фрагмент под свою ширину, а просто показывал кусок моего фрагмента до полного выдвижения bottomSheet
Меняю ширину BottomSheet в методе onSlide:
sheetBehavior.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
/*Data for bottomSheet width dynamic change
widthDifference and initialBottomSheetWidth are set only simultaneously with
the 1st time sliding.
*/
private var wasDataSet: Boolean = false
private var initialBottomSheetMargin: Int = 0
override fun onSlide(bottomSheet: View, slideOffset: Float) {
if (!wasDataSet) {
initialBottomSheetMargin = bottom_sheet.marginStart
wasDataSet = true
}
val newMargin: Int =
(initialBottomSheetMargin * (1 - slideOffset)).toInt()
val newLayoutParams = bottomSheet.layoutParams as ViewGroup.MarginLayoutParams
newLayoutParams.marginStart = newMargin
newLayoutParams.marginEnd = newMargin
bottomSheet.layoutParams = newLayoutParams
}
override fun onStateChanged(bottomSheet: View, newState: Int) {}
})


