在dialogfragment中的Android圆angular布局

我想做一个带angular落的对话框片段。 我有这个问题

在这里输入图像说明

正如你所看到的,如果一个TextView在顶部,将会有一些部分位于对话框的透明部分,这是不好的。 从列表视图滚动条也会发生这种情况。 我想“剪切”那个部分,或者像第二张照片一样掩饰它们。 这可能吗?

形状

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#FFF" /> <corners android:topLeftRadius="20dp" android:topRightRadius="20dp" android:bottomLeftRadius="20dp" android:bottomRightRadius="20dp"/> <stroke android:color="#7F7F7F" android:width="1dp" /> </shape> 

我正在使用线性布局的片段,具有上述背景。 我打电话

 getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 

摆脱背景颜色和标题栏。

Solutions Collecting From Web of "在dialogfragment中的Android圆angular布局"

简单(非裁剪)的方式

最简单的方法是简单地添加填充到您的布局。 那么你的文字将不会与圆angular重叠。

如果你必须有没有填充的圆angular,还有其他一些我知道的选项:

选项1:剪辑视图(API 21+)

支持裁剪视图被添加到API 21中的View类。如果您不需要较早的API级别,使用这个内置的剪辑function非常简单:

  • 设置您的圆形可绘制为您的布局背景。
  • 根据文档,您只需将布局XML中的剪辑属性设置为android:clipToOutline="true"

不幸的是,有一个错误 ,这个属性似乎没有工作。 幸运的是,我们可以在Java中设置裁剪:

  • 在您的活动或片段中,只需执行: View.setClipToOutline(true)

我testing过了,它可以工作:

查看裁剪ON查看剪裁关闭

选项2:九片框架掩码

如果您需要在设备<API 21上支持舍入剪辑,则可以使用以下一般方法:

  • 使用一个FrameLayoutRelativeLayout ,创build一个圆angular九个补丁来“框架”你的内容的其余部分。
  • 这九个补丁的图像应该是透明的(阿尔法0%),除了angular落,这应该是不透明的(阿尔法100%)。
  • 设置九个补丁作为视图的背景,并将该视图作为布局中的最后一个子视图(这使得它在其他视图之上堆叠)。
  • 文本将通过透明的九个补丁显示,但是会在angular落被屏蔽。

如果您使用这种方法,只需让您的九贴片angular落匹配您的背景的颜色。