**本文将从一下几个方面展开:
1Bulider模式的原理和使用
2系统Dailog的调用
3自定义Dailog
4自定义Dailog的一些小坑**
本文Github代码链接
https://github.com/AndroidMsky/AirDialog
自定义Dailog效果:
1.Bulider模式的原理和使用
当你看到这样的一串代码是不是觉得很炫酷?
airDialog = new AirDialog.Builder(this).
setLeftText("gogo").
setRightText("nono").
create();
通过几个点点,像一个链子一样配置组装一个对象。今天就教给大家自己也可以设计这样一条链子。相比构造方法,这种模式更加灵活,更加清晰。
先看看设计图:
别怕相信大多数人都看不懂。不过对设计模式了解比较多的人呢还是可以看懂的,今天就咱不谈这个类图(你看懂不如会用)。
为什么可以里连续…….的调用方法,其实就是每次调用方法后return一个对象就好喽。当前的表达式值就一直是这个对象所以可以无限的….下去。
public Builder setLeftText(String left) {
this.left=left;
return this;
}
代码很清晰没个设置方法都是这样的,方法的返回类型就是当前的Builder。那么我们就可以继续的调用Builder类中的方法喽。
2.系统Dailog的调用
new AlertDialog.Builder(MainActivity.this).setTitle("系统提示")//设置对话框标题
.setMessage("!")//设置显示的内容
.setPositiveButton("确定",new DialogInterface.OnClickListener() {
//添加确定按钮
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).setNegativeButton("返回",new DialogInterface.OnClickListener() {
//添加返回按钮
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).show();//在按键响应事件中显示此对话框
系统提供了很多的Dialog的子类本文不去详细介绍,接下来就说如何自己写一个类似Dialog的子类。
3.自定义Dailog
1继承Dialog并且实现构造方法:
public class AirDialog extends Dialog {
public AirDialog(Context context) {
super(context, R.style.custom_dialog);
}
super方法的第二个参数是为Dialog指定一个主题,那就在Styles。xml中加入如下代码:
<style name="custom_dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item> <!-- 边框 -->
<item name="android:windowIsFloating">true</item> <!-- 是否浮现在activity之上 -->
<item name="android:windowIsTranslucent">true</item> <!-- 半透明 -->
<item name="android:windowNoTitle">true</item> <!-- 无标题 -->
<item name="android:windowBackground">@android:color/transparent</item>
</style>
常用的几个标签的意思已经注释。可以通过配置跟多的标签来扩展dialog的样式。
这样就可以去调用一个dialog了,但是不行,我们要加入Builder模式,于是参考安卓源码后新建内部静态类