一键式生成自定义Dialog

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

        最近在公司做项目碰到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下载地址:点击打开链接

       

 









  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值