如何在Android中创build完全自定义的对话/popup窗口(更改叠加颜色和对话窗口布局)

我想完全重新安装Android中的默认对话组件。 具体我想这样做:

  • 将半透明叠加层背景从默认黑色更改为半透明白色。

  • 通过删除默认的窗口边框来更改对话框窗口,并用XML定义的布局replace它(这只是一个带有浮动button的无边框graphics,没有实际的框架)。

我已经看到有关在对话框中创build自定义布局的教程(例如http://www.helloandroid.com/tutorials/how-display-custom-dialog-your-android-application ),但我还没有看到任何东西关于改变覆盖层的颜色和/或完全定制popup的对话窗口,并把它变成没有“窗口”的覆盖层。

我已经解决了这个问题,并使用以下步骤创build了自定义彩色半透明叠加层背景的自定义popup式叠加层:

1 – 在res / values /文件夹中创build一个新的xml文件,并将其命名为styles.xml

2 – 这里是你将定义你的对话框属性。 这是我的样子。 如果要replace在屏幕上显示的默认半透明黑色叠加层,则必须将windowIsFloating设置为false,并将布局的背景修改为所需的任何颜色。 这是我用下面的文件:

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="CustomDialogTheme" parent="@android:style/Theme.Dialog"> <item name="android:windowBackground">@color/transparent_white</item> <item name="android:windowIsFloating">false</item> <item name="android:windowNoTitle">true</item> </style> </resources> 

3 – 回到你的java代码中,当创build对话框对象时,使用传递上下文和主题的构造函数。 例如。 myDialog = new Dialog(this, R.style.CustomDialogTheme); (CustomDialogTheme是我在步骤2的styles.xml中指定的名称属性)

4 – 只需将对话框对象内容视图设置为您希望对话框的任何布局。 例如。 myDialog.setContentView(R.layout.my_custom_overlay); 如果您希望对话框出现在屏幕的中心,请将其根元素的android:layout_gravitycenter

这对我很好,但是如何closures对话框。 如果您的自定义布局中有一个button将其closures,那么以下是如何添加侦听器并closures对话窗口。

 final Dialog d = new Dialog(this,R.style.CustomDialogTheme); d.setContentView(R.layout.custom_dialog); d.show(); Button close_btn = (Button) d.findViewById(R.id.close_btn); close_btn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { d.dismiss(); } });