这是我第一次写博客,水平有限,希望和大家互相分享和学习。
最近在公司做项目碰到Dialog的问题,因为是做的安卓系统的二次开发,一开始用得都是原生的Dialog,后期又要改UI,一个一个改的话很麻烦,牵扯的代码太多,于是我封装了一个Dialog,方便一些。
以下是具体的实现:新建一个UnifyDialog继承自Dialog, 构造函数传入Context,监听接口,自定义的布局,两个Button实例,Dialog的宽和高等参数。
创建一个监听接口UnifyDialogListener,提供一个onclick()方法,在oncreate()里初始化控件和设置宽高,UnifyDialog实现OnclickListener接口,通过回调的方式实现Dialog中按钮的点击事件.
public class UnifyDiaolog extends AlertDialog implements android.view.View.OnClickListener{
private UnifyDiaologListener mDiaologListener;
private Context context;
private View mview;
private Button button1;
private Button button2;
private int wid;
private int hei;
/**
* @param context 上下文
* @param mDiaologListener 监听回调接口
* @param mview 自定义的view
* @param button1 确定的button
* @param button2 取消的button
* @param wid dialog的宽
* @param hei dialog的高
*/
public UnifyDiaolog(Context context,UnifyDiaologListener mDiaologListener,View mview,Button button1,Button button2,int wid,int hei) {
super(context);
this.context=context;
this.mDiaologListener=mDiaologListener;
this.mview=mview;
this.button1=button1;
this.button2=button2;
this.wid=wid;
this.hei=hei;
}
/**
* @author 提供一个监听接口
*
*/
public interface UnifyDiaologListener{
public void onClick(View v);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(mview);
initview(); //初始化布局
WindowManager.LayoutParams lp = this.getWindow().getAttributes(); // 获取对话框当前的参数值
lp.width = wid; // 宽度
lp.height = hei; // 高度
this.getWindow().setAttributes(lp);
}
private void initview() {
if(button1!=null){
button1.setOnClickListener(this);
}
if(button2!=null){
button2.setOnClickListener(this);
}
}
@Override
public void onClick(View v) {
mDiaologListener.onClick(v);
}
}
比如我们要创建一个Dialog,设定大小是800x1200,先新建一个dialogview.xml布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:background="#ffffff"
android:layout_height="wrap_content" >
<Button
android:id="@+id/no_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginTop="188dp"
android:text="取消" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/no_btn"
android:layout_centerHorizontal="true"
android:layout_marginBottom="79dp"
android:text="显示"
android:textSize="40sp" />
<Button
android:id="@+id/yes_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/no_btn"
android:layout_alignBottom="@+id/no_btn"
android:layout_marginRight="23dp"
android:text="确定" />
</RelativeLayout>
在要使用Dialog的地方只需要,new UnifyDiaolog(context, mDiaologListener, mview, button1, button2, wid, hei);即可生成一个Dialog,具体代码可以参照下面
public class MainActivity extends Activity {
private Context context;
private Button yes_btn; //确定按钮
private Button no_btn; //取消按钮
private View view; //自定义的布局
private Button tanchu; //弹出dialog的按钮
private UnifyDiaolog mDiaolog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context=this;
//弹出dialog
tanchu=(Button)findViewById(R.id.tanchu);
//自定义的布局
view=View .inflate(context, R.layout.dialogview, null);
yes_btn=(Button) view.findViewById(R.id.yes_btn);
no_btn=(Button) view.findViewById(R.id.no_btn);
//创建dialog对象
mDiaolog=new UnifyDiaolog(context, new UnifyDiaologListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.yes_btn:
Toast.makeText(context, "确定", 0).show();
break;
case R.id.no_btn:
Toast.makeText(context, "取消", 0).show();
mDiaolog.dismiss();
break;
}
}
}, view, yes_btn, no_btn, 800, 1200);
</pre><pre name="code" class="java"> //弹出dialog
tanchu.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mDiaolog.show();
}
});
}
}
效果图如下:
就是这么简单的搞定了,只需要有一个布局就可以生成一个Dialog,不用再去写监听事件。
Demo下载地址:点击打开链接