2011-09-13 203 views
2

我试图做成一个圆角矩形的对话框。我通过指定以下形状XML作为背景的对话框layout.xml没有背景的android圆角矩形直边矩形

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

    <solid android:color="#FFFFFF"/> 
    <corners android:radius="40dp"/> 
    <padding android:left="10dp" 
      android:right="10dp" 
      android:top="10dp" 
      android:bottom="10dp"/> 
</shape> 

所得对话已倒圆的黑色90度矩形内角这样做。我想知道我如何摆脱九十度长方形,只剩下圆角矩形。

好像矩形模板后,我的曲线留下的角落:

下面是对话的图片的链接我的代码的生成:http://img577.imageshack.us/img577/8292/photoon20110912at2032.jpg

+1

以下情况之一可能会有帮助:http://stackoverflow.com/questions/6101623/how-to-add-rounded-corners-半透明背景的活动或http://developer.android.com/guide/topics/ui/themes.html我实际上没有经验的自定义对话框,但这两个链接看起来像他们可能会回答你的题。 – Jakar

+1

你的代码适用于我,我认为你的问题是对话框中的任何内容是填充父项,并且这个尖角已经通过了你的半径圆角。尝试增加填充到100dip只是为了测试这个。 – Blundell

+0

@Blundell为我工作 - 谢谢!一样的问题。圆角,但在角落外面有一些不需要的背景,就好像在形状周围有一个矩形。我花了很多年试图从形状中为背景着色,而没有任何工作。然后,我将填充的形状设置为100dp,并发现问题出现在父项中。一旦我将额外的填充物放入,这一点就很清楚了。简而言之,圆形按钮的标准解决方案(带有形状和角)适用于将圆形形状放置到背景上。 –

回答

4

试试这个:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:shape="rectangle"> 
<solid android:color="#B7B7B7"/> 
<corners android:bottomLeftRadius="8dip" 
    android:bottomRightRadius="8dip" 
    android:topLeftRadius="8dip" 
    android:topRightRadius="8dip"/> 
</shape> 
+0

我不认为这与我已有的代码有什么不同。我不确定在这种情况下方向,宽度和高度属性有什么不同,但我没有注意到我的对话框有任何变化。我的矩形环绕着一个TextView,所以看起来像我的对话框的大小只是由文本视图和填充确定。 – Jays

+0

以及我给你的东西,为我工作。那么你能给出一个你现在得到的东西的截图吗?所以可能生病尝试以其他方式 – Lavanya

3

这将给你没有背景所需的圆角矩形:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 

<gradient 
    android:angle="270"/> 
<stroke 
    android:width="2dp" 
    android:color="#FFF"/> 
<corners 
    android:radius="40dp"/>  

</shape> 

UPDATE以供将来参考(它被添加评论)

Context mContext = getApplicationContext(); 
Dialog dialog = new Dialog(mContext,android.R.style.Theme_Translucent_NoTitleBar); 
dialog.setContentView(R.layout.custom_dialog); dialog.show(); 
+0

我逐字拷贝了它,但所有不同的是黑色模板矩形内圆角矩形的轮廓。我添加了一张图片来向您展示我从发布的代码中获得的内容。渐变有什么作用?我的理解是它用于对话框中的颜色变化。如果这对你有用,那么我一定在做别的事情。 – Jays

+1

我对迟到的反应表示歉意,花了一些时间找出解决方案。试试这个来摆脱黑色九十度矩形: 'Context mContext = getApplicationContext();' '对话框对话框= new Dialog(mContext,android.R.style.Theme_Translucent_NoTitleBar);' 'dialog.setContentView(R .layout.custom_dialog);' ' dialog.show();' 希望这会有所帮助。 – Permita

5

写您的构造函数:

public CustomDialog(Context context, int theme) { super(context, theme); getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); }

+0

谢谢!它为我工作 –

+0

谢谢。正是我在找什么。你也可以在没有你自己的构造函数的情况下使用它:MyDialog.getWindow()。setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); –

+0

谢谢@Ishlfa。这个对我有用... –

0

我感到很震惊,我发生了同样的问题,解决的办法是也有点奇怪。创建您自己的自定义绘图,例如见下文。

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 

    <solid android:color="@color/text_highlight" /> 

    <stroke 
     android:width="5dp" 
     android:color="@color/text_highlight" /> 

    <corners android:radius="12dp" /> 

    <stroke 
     android:width="1dp" 
     android:color="@android:color/transparent" /> 

</shape> 

以下行添加到您的对话框:

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

// This is line that does all the magic 
dialog.getWindow().setBackgroundDrawableResource(        
R.drawable.dialog_rounded);