我想完全重新设置Android中的默认对话框组件。具体来说,我想这样做:
将半透明叠加背景从默认黑色更改为半透明白色。
更改对话窗口 删除默认的窗口边框, 并用布局替换它 用XML定义(它只会是 一个漂浮的无边框图形 纽扣。没有实际的框架。)
我看过有关在对话框中创建自定义布局的教程(例如http://www.helloandroid.com/tutorials/how-display-custom-dialog-your-android-application),但我没有看到任何关于更改叠加层颜色和/或完全自定义弹出的对话窗口的内容向上并将其更多地转换为没有“窗口”的叠加层。
答案 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();
}
});