布局背景未根据 BottomSheet 布局中的可绘制背景进行裁剪
Posted
技术标签:
【中文标题】布局背景未根据 BottomSheet 布局中的可绘制背景进行裁剪【英文标题】:Layout background is not clipped according to background drawable in BottomSheet layout 【发布时间】:2019-11-14 02:55:53 【问题描述】:我想制作带有圆角的 BottomSheet 的布局,但设置一个带有圆角半径的可绘制对象不会裁剪布局背景。
我正在使用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_
android:layout_
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:
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
请帮忙!提前致谢!
【问题讨论】:
至少对我来说,这个问题还不清楚。期望的结果是什么? 我想去掉灰色圆形边框外的白色背景。 现有背景没有被drawable裁剪 我猜这是不可能自动获得的。你应该在你的drawable中模拟效果。现有背景的颜色是什么。是你定义的吗? 您可以在不定义背景可绘制对象的情况下添加圆角。检查这个post 【参考方案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的内部结构的了解,所以选择你喜欢的那个。
【讨论】:
我在BottomSheetFragment
中尝试了你的 sn-p,它只是改变了活动的背景颜色
@user158 错过了有关片段的部分。它是 BottomSheetDialogFragment 还是 BottomSheetDialog?
感谢您愿意提供帮助。这是BottomSheetDialogFragment
很抱歉在问题中遗漏了一些信息,我更新了问题。你的回答奏效了。以上是关于布局背景未根据 BottomSheet 布局中的可绘制背景进行裁剪的主要内容,如果未能解决你的问题,请参考以下文章