我想制作带有圆角的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>
当前结果:
尝试过:
使用编程方式剪切
view.clipToOutline = true
请帮助!预先感谢!
答案 0 :(得分:1)
圆角的颜色来自底板容器的颜色。为了确定如何制作透明角,我们需要检查布局。布局检查器确定了我们感兴趣的关键组件:底部工作表本身( id / bottomSheet )及其框架( id / design_bottom_sheet )。
我们需要将底部工作表框架 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);
}
您也可以为框架本身做一个findViewById()
:
getDialog().findViewById(R.id.design_bottom_sheet).setBackgroundColor(Color.TRANSPARENT)
这两种方法都取决于对 BottomSheetDialogFragment 的内部结构的了解,因此请选择您喜欢的一种。