安卓封装的AlertDialog是非常好用的一个dialog,满足平时开发中的大部分工作。

但是毕竟开发中,dialog的样式必须要和app主题相符合,这就需要修改dialog的样式。

但是dialog并没有提供改变样式的方法,这就要我们自己去弄了。

网上提供了很多,有用style 有用java 反射去获取控件的。

但是研究源码可以看到,其实可以用代码去设置。

先看看不作任何修改的时候,alterdialog的显示。

ps:(Button可以在style中修改可以通过查看源码的方法找到,他的style里面button颜色对应的字段就是colorAccent)

android studio透明背景(手机处理gif透明背景) 第1张  android studio透明背景(手机处理gif透明背景) 第2张    android studio透明背景(手机处理gif透明背景) 第3张  android studio透明背景(手机处理gif透明背景) 第4张    android studio透明背景(手机处理gif透明背景) 第5张  android studio透明背景(手机处理gif透明背景) 第6张    android studio透明背景(手机处理gif透明背景) 第7张  android studio透明背景(手机处理gif透明背景) 第8张    android studio透明背景(手机处理gif透明背景) 第9张  android studio透明背景(手机处理gif透明背景) 第10张  

当我们要修改title 或者message 或者button的颜色的时候,alterdialog并没有提供方法。

但是研究源码可以看到alterDialog提供了getButton();

android studio透明背景(手机处理gif透明背景) 第11张  android studio透明背景(手机处理gif透明背景) 第12张  

源码在AlterDialog.class里面

android studio透明背景(手机处理gif透明背景) 第13张  android studio透明背景(手机处理gif透明背景) 第14张  

源码位置在AlertController.class里面

原来这样就可以获取Button了,那么Button的字体和颜色就不成什么问题了。

注意必须dialog.show()之后才可以获取到Button不然获取到的Button为空的。

因为返回的参赛如mButtonPositive实例化是在setupButtons这个方法里面,而这个方法只有alterDialog在show的时候才会调用

android studio透明背景(手机处理gif透明背景) 第15张  android studio透明背景(手机处理gif透明背景) 第16张  

源码位置在AlertController.class里面

那么问题来了message和title呢,alterDialog并没有提供这个方法,这个怎么获取,

其他上面Button的实例化已经提供了一个方法,看图

android studio透明背景(手机处理gif透明背景) 第17张  android studio透明背景(手机处理gif透明背景) 第18张  

他的Button是通过findById去获取的,那么我们title和message不一样可以用findById么。

ctrl+鼠标左键,查看布局源码,找到title和message的id。如图

android studio透明背景(手机处理gif透明背景) 第19张  android studio透明背景(手机处理gif透明背景) 第20张  

源码位置在alter_dialog.xml里面

android studio透明背景(手机处理gif透明背景) 第21张  android studio透明背景(手机处理gif透明背景) 第22张  

源码位置在alter_dialog.xml里面

那么我们就可以通过Id去获取了

android studio透明背景(手机处理gif透明背景) 第23张  android studio透明背景(手机处理gif透明背景) 第24张  

至于为什么我上面用android.R.id.message去获取id是因为项目中的ids.xml中已经有了message这个id了

控件获取到了修改字体和颜色 不就是小case了。

android studio透明背景(手机处理gif透明背景) 第25张  android studio透明背景(手机处理gif透明背景) 第26张  

效果图

android studio透明背景(手机处理gif透明背景) 第27张  android studio透明背景(手机处理gif透明背景) 第28张  

DialogTitle是继承TextView的所有上面的查找Title的控件 我直接转化成TextView

android studio透明背景(手机处理gif透明背景) 第29张  android studio透明背景(手机处理gif透明背景) 第30张  

多研究源码收获还是很多的。