如何在Android中创建完全自定义的对话框/弹出窗口(更改覆盖层颜色和对话框窗口布局)

39

我想完全重新设计Android中默认的对话框组件。具体来说,我希望做到以下几点:

  • 将半透明的覆盖层背景从默认的黑色更改为半透明白色。

  • 通过移除默认窗口边框并替换为在XML中定义的布局(这只是一个无边框图形,带有浮动按钮。没有实际的边框),更改对话窗口。

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

2个回答

84

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

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


4
这将去除边框,但仍会在我的布局周围留下黑线。有什么想法吗? - Tolga E

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

1
感谢您添加了额外的信息 :) - justinl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接