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

时间:2010-09-16 17:05:58

标签: android dialog popup overlay

我想完全重新设置Android中的默认对话框组件。具体来说,我想这样做:

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

  • 更改对话窗口 删除默认的窗口边框, 并用布局替换它 用XML定义(它只会是 一个漂浮的无边框图形 纽扣。没有实际的框架。)

我看过有关在对话框中创建自定义布局的教程(例如http://www.helloandroid.com/tutorials/how-display-custom-dialog-your-android-application),但我没有看到任何关于更改叠加层颜色和/或完全自定义弹出的对话窗口的内容向上并将其更多地转换为没有“窗口”的叠加层。

2 个答案:

答案 0 :(得分:83)

我已经解决了这个问题,并使用以下步骤创建了我自己的自定义弹出式叠加层,其中包含自定义彩色半透明叠加背景:

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

2 - 您可以在此处定义对话框属性。这是我的样子。如果要替换屏幕上显示的默认半透明黑色叠加层,则必须将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代码中,在创建对话框对象时,使用传递上下文和主题的构造函数。例如。 myDialog = new Dialog(this, R.style.CustomDialogTheme);(CustomDialogTheme是我在第2步中的styles.xml中指定的名称属性)

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

答案 1 :(得分:20)

这对我来说非常有用,但却遗漏了如何关闭对话框。如果你的自定义布局中有一个按钮来关闭它,下面是如何添加监听器并关闭对话窗口。

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();
    }
});