android椭圆形状对话框

时间:2012-08-08 00:40:56

标签: java android

我有一个应用程序,它有一个按钮,当按下它时会弹出一个带有默认对话框形状的对话框,我想知道我是否可以将对话框的默认形状更改为椭圆形状并且还应用特殊样式,

如下图所示:

1-默认对话框形状:

enter image description here

2-Oval Dialog Shape(我试图实现):

enter image description here

我的拨号代码:

 final Dialog dialog = new Dialog(context);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);           
        dialog.setContentView(R.layout.custom_dialog);

 TextView text = (TextView) dialog.findViewById(R.id.dialog_text);
 text.setText(Html.fromHtml(getString(R.string.text_4)));

 ImageView image = (ImageView) dialog.findViewById(R.id.image);
 image.setImageResource(R.drawable.pic);

 Button dialogButton = (Button) dialog.findViewById(R.id.dialog_Button);

 dialogButton.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        dialog.dismiss();
                }
            });

    dialog.show();
             }
        });

    }

默认对话框的样式代码:

 <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
      android:shape="rectangle">
     <stroke android:width="2dp" android:height="2dp" android:color="#B22222" /> 
       <solid android:color="#FCE6C9" /> 
        <padding android:left="2dp" android:top="2dp" android:right="2dp"
         android:bottom="2dp" /> 
     <corners android:radius="5dp" /> 
    </shape>

我希望通过代码而不是使用9-patch图像来完成这项工作,这样就可以很容易地控制dilaoge尺寸并根据需要调整其中的文本,

任何建议都将不胜感激,谢谢。

5 个答案:

答案 0 :(得分:0)

不完全确定如何在Android上执行此操作,但我在java中使用的方法是使 JFrame JDialog 渲染表面透明然后在里面绘制我自己的自定义形状。为了使它们透明,我使用 AWTUtilities.setWindowOpacity

在这篇文章中,你会发现另一个想法,比如在渲染帧或对话框之前捕获桌面并使用它来修补你的框架:

http://today.java.net/pub/a/today/2008/03/18/translucent-and-shaped-swing-windows.html

更多信息:

http://java.sun.com/developer/technicalArticles/GUI/translucent_shaped_windows/

这里有一个实现,不是为了android,但它可能有所帮助:

http://www.codeproject.com/KB/java/shaped-transparent-jframe.aspx

答案 1 :(得分:0)

干净的想法。在Android上,要为活动提供透明背景,请将其放入清单文件中:

<activity android:name=".MyActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" />

然后,在该活动的布局文件中,添加此

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<ImageView
android:id="@+id/myImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/myRoundBackground" />

<TextView
android:id="@+id/myImageViewText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/myImageView"
android:layout_alignTop="@+id/myImageView"
android:layout_alignRight="@+id/myImageView"
android:layout_alignBottom="@+id/myImageView"
android:layout_margin="1dp"
android:gravity="center"
android:text="Hello"
android:textColor="#000000" />

</RelativeLayout>

然后,您可以使用id myImageViewText以编程方式在TextView上设置文本。

答案 2 :(得分:0)

看看这个quick action menu totorial。尝试使用shape = oval background应用本教程。我想你会得到你想要达到的目标。


答案 3 :(得分:0)

我认为将图像切成椭圆形的透明背景将适合您。并将按钮放在椭圆形图像的左侧。

答案 4 :(得分:0)

这种方法类似于您目前正在尝试的方法: 在你的custom_dialog.xml中给出相对布局android:background =&#34; @ drawable / ovaldialog&#34;

在ovaldialog.xml中尝试给出与编辑样式相同的参数,方法是给android:shape =&#34; oval&#34;并且还给角落提供参数,例如android:topLeftRadius =&#34; 8dp&#34;和android:bottomRightRadius =&#34; 10dp&#34;并使用这些值,直到你得到一个理想的形状。要给对话框指定红色,请为其指定宽度为2 / 3dp的笔触和一个android:颜色值。

希望这有帮助