Фон макета не обрезается в соответствии с фоном, который можно нарисовать в макете BottomSheet. - PullRequest
1 голос
/ 03 июля 2019

Я хочу сделать макет листа BottomSheet со скругленными углами, но настройка рисования с радиусом угла не обрезает фон макета.Я использую BottomSheetDialogFragment.

фрагмент_a.xml

<androidx.constraintlayout.widget.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/round_rectangle">
   <!-- other views here -->
</androidx.constraintlayout.widget.ConstraintLayout>

round_rectangle.xml

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"   >
    <solid
        android:color="@android:color/white" />
    <stroke
        android:width="2dp"
        android:color="#C4CDE0" />
    <padding
        android:left="0dp"
        android:right="0dp"
        android:top="0dp"
        android:bottom="0dp" />
    <corners
        android:topLeftRadius="16dp"
        android:topRightRadius="16dp" />
</shape>

Текущий результат:

uncliped layout

Попытка:

Отсечение программно с использованием

view.clipToOutline = true

Пожалуйста помоги!Заранее спасибо!

1 Ответ

1 голос
/ 03 июля 2019

Цвет ваших закругленных углов зависит от цвета нижнего контейнера для листов. Чтобы определить, как сделать наши прозрачные углы, нам нужно осмотреть макет. Инспектор макетов идентифицирует ключевые компоненты, которые нас интересуют: сам нижний лист ( id / bottomSheet ) и его фрейм ( id / design_bottom_sheet ).

enter image description here

Нам потребуется изменить цвет фона рамки нижнего листа, id / design_bottom_sheet , на прозрачный, чтобы получить наши закругленные углы.

Найти кадр легко, как только он станет доступен. Одно место для установки фона рамки после создания диалога и создания фрагмента достаточно далеко: onActivityCreated () вашего пользовательского BottomSheetDialogFragment . На этом этапе жизненного цикла фрагмента создается иерархия представления.

@Override
public void onActivityCreated(Bundle bundle) {
    super.onActivityCreated(bundle);
    View frameParent = ((View) getDialog().findViewById(R.id.bottomSheet).getParent());
    frameParent.setBackgroundColor(Color.TRANSPARENT);
}

enter image description here

Вы также можете просто сделать findViewById() для самого кадра:

getDialog().findViewById(R.id.design_bottom_sheet).setBackgroundColor(Color.TRANSPARENT)

В любом случае зависит от знания внутренней структуры BottomSheetDialogFragment , поэтому выберите тот, который вы предпочитаете.

...