在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)); 

摆脱背景颜色和标题栏。

  • 带有CollapsingToolbarLayout的CoordinatorLayout与Dialog片段中的Keyboard断开
  • OnCancelListener不在DialogFragment中调用
  • 从DialogFragment中设置状态栏颜色
  • 全屏幕DialogFragment
  • 方向更改后,Android DialogFragment消失
  • Android Alert Dialog无法find视图
  • 添加警报窗口后,DialogFragment未显示
  • DialogFragment按钮在棒棒糖中的颜色变化
  • 简单(非裁剪)的方式

    最简单的方法是简单地添加填充到您的布局。 那么你的文字将不会与圆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落匹配您的背景的颜色。