不会根据BottomSheet布局中的可绘制背景裁剪布局背景

时间:2019-07-03 12:04:26

标签: android android-constraintlayout

我想制作带有圆角的BottomSheet的布局,但是设置具有拐角半径的drawable不会剪切布局背景。  我正在使用BottomSheetDialogFragment

fragment_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 个答案:

答案 0 :(得分:1)

圆角的颜色来自底板容器的颜色。为了确定如何制作透明角,我们需要检查布局。布局检查器确定了我们感兴趣的关键组件:底部工作表本身( id / bottomSheet )及其框架( id / design_bottom_sheet )。

enter image description here

我们需要将底部工作表框架 id / design_bottom_sheet 的背景颜色更改为透明,以得到圆角。

找到框架很容易。一旦创建对话框并且片段的创建就足够了,就可以设置框架背景的位置位于自定义 BottomSheetDialogFragment onActivityCreated()中。在片段的生命周期中,视图层次结构已实例化。

@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 的内部结构的了解,因此请选择您喜欢的一种。