dialogfragment中的Android圆角布局

Bol*_*aul 8 android rounded-corners android-dialogfragment

我想用角落制作一个对话框片段.我有问题

在此输入图像描述

如您所见,如果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>
Run Code Online (Sandbox Code Playgroud)

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

getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Run Code Online (Sandbox Code Playgroud)

摆脱背景颜色和标题栏.

hun*_*ost 7

简单(非剪裁)方式

最简单的方法是简单地向您的布局添加填充。那么您的文本将不会与圆角重叠。

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

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

API 21 中的类中添加了对剪辑视图的支持View。如果您不需要早期的 API 级别,使用此内置剪辑功能非常容易:

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

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

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

我已经测试过了,它有效:

查看剪裁开启 查看剪裁关闭

选项 2:九片式框架遮罩

如果您需要在设备 < API 21 上支持舍入裁剪,您可以使用这种通用方法:

  • 使用FrameLayoutor RelativeLayout,创建一个圆角九个补丁来“框定”您的其余内容。
  • 这九个补丁图像应该是透明的(alpha 0%),除了角落应该是不透明的(alpha 100%)。
  • 将九个补丁设置为视图的背景,并将该视图作为布局中的最后一个子视图(这使其堆叠在其他视图的顶部)。
  • 然后文本将通过透明的九个补丁显示,但会在角落处被屏蔽。

如果你使用这种方法,只需让你的九个补丁角与你的背景颜色相匹配。