Android本身封装的AlertDialog.Builder很方便易用,但如果想要自定义弹出对话框的风格,如标题字体背景元素间隔之类的,那就比较困难了。

最近我就遇到了这个问题,一个工程的界面风格全改成蓝白色了,自然客户希望对话框也是蓝白色的,同时字体也有变化。但安卓自带对话框默认是黑白的,不同手机厂商定制的ROM显示的对话框各不相同,但基本上都是黑白风格。

程序里所有对话框都是用AlertDialog.Builder创建的,因此一开始我想到的解决办法是继承AlertDialog.Builder,做好几个固定的布局模板,然后在根据需要创建自己的对话框。但程序里弹对话框的地方太多了,粗略查找一下有一百多个,每个的写法都不太相同——有的有标题有的没有,有的有一个按钮有的有两个或三个,有的是消息有的是列表,有的是单选有的是输入框,有的按钮有事件,有的是列表项有事件,甚至还有键盘取消事件什么的。这些东西一个个遍历下来估计得准备几十个模板。

继承行不通,于是就想着改主题样式。上网查知AlertDialog支持自定义样式,就是new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.AlertDialogCustom))的方式,然后在styles.xml里自定义主题风格(