一键式生成自定义Dialog

来源:互联网 发布:马刺 湖人 知乎 编辑:程序博客网 时间:2024/05/06 00:13

           这是我第一次写博客,水平有限,希望和大家互相分享和学习。

        最近在公司做项目碰到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; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);context=this;//弹出dialogtanchu=(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() {@Overridepublic 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() { @Overridepublic void onClick(View v) {mDiaolog.show();} }); }  }


           效果图如下:

          


         就是这么简单的搞定了,只需要有一个布局就可以生成一个Dialog,不用再去写监听事件。

        Demo下载地址:点击打开链接

       

 









0 0
原创粉丝点击