1

我有一个应用程序,它有一个按钮,按下它会触发一个具有默认对话框形状的对话框,我想知道我是否可以将对话框的默认形状更改为椭圆形并对其应用特殊样式,

如下图所示:

1-默认对话框形状:

在此处输入图像描述

2-椭圆形对话框形状(我试图实现):

在此处输入图像描述

我的对话代码:

 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 尺寸并根据需要调整其中的文本,

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

4

5 回答 5

0

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

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

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

更多信息:

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

在这里,您有一个实现,不适用于 android,但它可能会有所帮助:

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

于 2012-08-08T01:05:07.743 回答
0

看看这个快速操作菜单教程。尝试使用 shape = 椭圆形背景应用本教程。我想你会得到你想要达到的。


于 2012-08-14T09:29:18.247 回答
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 上设置文本。

于 2012-08-08T01:12:07.287 回答
0

此方法类似于您当前正在尝试的方法:在您的 custom_dialog.xml 中为相对布局提供 android:background="@drawable/ovaldialog" 。

并在ovaldialog.xml 中尝试通过给android:shape="oval" 给出相同的参数来编辑样式,并将参数给角,例如android:topLeftRadius="8dp" 和android:bottomRightRadius="10dp "并使用这些值,直到获得所需的形状。为了给对话框赋予红色,给它一个宽度为 2/3dp 的描边和一个 android:color 值。

希望这可以帮助

于 2012-08-15T21:38:01.813 回答
0

我认为带有椭圆形图像的透明背景对您有用。并将按钮放在椭圆形图像的左侧。

于 2012-08-15T05:44:48.320 回答