繁体   English   中英

对话框片段中的Android圆角布局

[英]Android round corner layout in 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>

我在上面的背景下为片段使用线性布局。 我打电话

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

摆脱背景颜色和标题栏。

简单(非剪切)方式

最简单的方法是在布局中添加填充。 这样您的文本就不会与圆角重叠。

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

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

裁剪视图的支持已添加到API 21的View类中。如果不需要较早的API级别,则使用此内置裁剪功能真的很容易:

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

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

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

我已经对其进行了测试,并且可以正常工作:

查看裁剪查看剪裁

选项2:九片式面膜

如果需要在<API 21的设备上支持四舍五入的裁剪,则可以使用以下常规方法:

  • 使用FrameLayoutRelativeLayout ,创建一个角圆角,以“框架”其余内容。
  • 此九块图像应为透明的(alpha为0%),但角应为不透明的(alpha为100%)。
  • 将九个修补程序设置为视图的背景,并将该视图作为布局中的最后一个子视图放置(这使它堆叠在其他视图之上)。
  • 然后,文本将通过透明的九个补丁显示,但将在角落处被遮罩。

如果使用这种方法,只需使九个色块的角与背景色匹配即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM