2014-12-06 73 views
8

我想创建一个带有角点的对话框片段。 这个问题我有对话框中的Android圆角布局

enter image description here

正如你看到的,如果在上面一个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)); 

为了摆脱背景颜色&标题栏。

+0

您可以尝试新的CardView,它具有圆角和海拔属性,看起来不错 – 2014-12-06 19:14:20

+0

我想使用DialogFragment ..卡片视图是一个视图..我想实现像Facebook注释对话框(我知道这是一个弹出窗口,但我想用片段对话框做类似的事情) – 2014-12-06 19:15:02

回答

3

简单的(非削波)方式

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

如果你必须有圆角没有填充,是我所知道的其他几个选项:

选项1:剪辑

clipping views支持添加到浏览次数(API 21+)在View类API 21.如果你不需要较早API级别,它真的很容易使用这个内置的夹子功能:

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

遗憾的是,a bug这个属性似乎并没有工作。幸运的是,我们可以在Java设置剪裁:

  • 在您的活动或片段,只是做:View.setClipToOutline(true)

我测试过它,和它的作品:

View Clipping ON View Clipping OFF

选项2:九贴片框架掩模

如果您需要支持的设备< API 21圆角裁剪,您可以使用此一般方法:

  • 使用FrameLayoutRelativeLayout,创建一个圆角nine-patch为“框架”内容的其余部分。
  • 这个9贴片图像应该是透明的(alpha 0%),除了角落,这应该是不透明的(alpha 100%)。
  • 将9-patch设置为视图的背景,并将该视图作为布局中的最后一个子视图(这会使其在其他视图之上堆叠)。
  • 然后文本将通过透明九贴片显示,但将在角落被遮罩。

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