您的位置:首页 > 移动开发 > Android开发

Android修改AlertDialog的背景颜色

2016-03-09 09:40 615 查看
【问题】

android程序开发中,需要对于一个app中的某个AlertDialog弹出的窗口中背景色实现自定义。

目前已有的代码是:

1.res/values/styles.xml

?
2.ModalAlertDialog

?
3.ModalDialogCreator

?
4.MainActivity.java

?
起初的逻辑是:

在MainActivity.java去new ModalDialogCreator的creator

然后creator去createMessageDialog,传入要显示的内容。

在createMessageDialog中,会去createDialog

createDialog中会去new ModalAlertDialog,使用当前的mHost和mTheme

而mTheme即全局的默认值AlertDialog.THEME_DEVICE_DEFAULT_DARK。

目前的问题是:

其中可见styles.xml已有对应的NewAlertDialog,去配置android:windowBackground为@android:color/holo_green_light。

但是不起效果。

即,当前的AlertDialog对话框的窗口背景色,还是全局的App的背景色:@android:color/holo_red_dark

而不是希望的,上述在NewAlertDialog中配置的@android:color/holo_green_light

其中,关于AlertDialog.THEME_DEVICE_DEFAULT_DARK等值,可以参考官网的文档:

AlertDialog官网文档

【解决过程】

1.之前去styles.xml中设置:

?
也是没任何效果的。

2.后来参考:

自定义
Android 对话框 (AlertDialog) 的样式

虽然没有直接给出此处的答案,但是大概看懂了其逻辑:

其是通过那一堆的LinearLayout,去实现了自定义的Dialog的显示页面的结构。

然后是用:

?
用于控制Dialog的背景色为空。

然后在CustomDialog的create()中去:

?
其中R.style.Dialog中的Dialog,就是上述resources中自定义的那个Dialog。

即:

先自定义一个xxx样式,然后在自定义Dialog(以及我此处的AlertDialog)中,再去通过R.style.xxx的方式去使用此自定义的样式

3.然后去看此处的已有的代码。

发现:

?
很明显,是拿到theme后,传递给了super,即ModalAlertDialog扩展自的那个AlertDialog

即,此处的theme最终是给了AlertDialog的。

所以,想到了使用自己定义的style。

先去添加一个自己的CustomAlertDialog:

?
再去让此处的AlertDialog使用自己的styple:

?
但是结果却还是无效,即此处的windowBackground,还是没效果。

4.后来经过尝试,实际上是background有效果。

即,改为:

?
然后就可以实现对应的效果了:

app的全局的颜色是深红色(@android:color/holo_red_dark):





然后对应的AlertDialog的窗口背景色是亮绿色(@android:color/holo_green_light):





如此,即实现了我们自定义AlertDialog窗口背景色的目的了。

5.其实,后来在:

How
to “theme” an Android Dialog

也给出极其简单的解释,也是此处用的方式。

【总结】

想要实现AlertDialog的窗口背景色的自定义的话,可以:

1.在res/values/styles.xml中,自定义一个style,设置背景色:

?
注意是

(1)android:background,而不是android:windowBackground

(2)parent,此处是@android:style/Theme.Holo.Dialog,暂时不太清楚,别的,非Dialog的话,是否有效。

2.实现你自己的自定义的AlertDialog类,其中构造函数中,把theme传给super的AlertDialog:

?
3.创建自定义AlertDialog类时,把对应的之前自己的style传递进去:

?
如此,即可。

转载:http://www.crifan.com/android_alertdialog_custom_dialod_window_background_color_use_styles_xml-2/

注意:

(1)CustomAlertDialogBackground是我们自定义的那个style。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: