Android编程心得-设计一个可重用的自定义Dialog

        我们在实际开发过程中,会遇到一个问题,我们的Dialog如果使用一般的方法进行设置调用出来,会有很多的重复代码,如何将Dialog按照自己的思路设计呢,并让其可重用呢,下面我来介绍一下我的方法

首先,设计Dialog的布局文件,代码如下,大家可以按照自己想要的方式设计适合自身APP的UI。

<?xml version="1.0" encoding="UTF-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/exit_layout"
        android:layout_width="280dp"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="vertical"
        android:background="@drawable/confirm_dialog_bg2" >

        <TextView
            android:id="@+id/Dlg_Title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="4dp"
            android:padding="5dp"
            android:textColor="#333"
            android:textSize="20sp"
            android:text="标题" />
        
        <TextView
            android:id="@+id/Dlg_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#333"
            android:layout_marginTop="1dp"
            android:padding="10dp"
            android:textSize="16sp"
            android:gravity="center_horizontal"
            android:text="内容\n" /> 
        

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"           
            android:layout_marginTop="33dp"
            android:layout_marginBottom="8dp"
             >
            
            <Button
              android:id="@+id/Dlg_Yes"
              android:layout_width="110dp"
              android:layout_height="wrap_content"
              android:text="是"
              android:textSize="16sp"
              android:textColor="#fff"
              android:background="@drawable/btn_style_green"
              android:gravity="center"

              />
             
            <Button
              android:id="@+id/Dlg_No"
              android:layout_width="110dp"
              android:layout_height="wrap_content"
              android:layout_marginLeft="10dp"
              android:text="否"
              android:textSize="16sp"
              android:textColor="#333"
              android:background="@drawable/btn_style_white"
              android:gravity="center"
	
              />
        </LinearLayout>

    </LinearLayout>


重点来了,我们设计完布局文件后,接下来就是要编写自定义Dialog的逻辑了,这里需要注意的是这个五参的构造函数与回调方法,我们的实例通过构造函数实例化Dialog的样式,标题,内容与监听器,这里我的我只考虑了是与否两个按钮,同时他们有着自定义的接口CustomDialogListener,当CustomDialog的实例对象实例化时,点击是否按钮,对Dialog中自定义的OnClick方法回调,并让dialog,消失

public class CustomDialog extends Dialog  implements android.view.View.OnClickListener{
	
	TextView Dlg_title,Dlg_Content;
	Button Dlg_Yes,Dlg_No;
	CustomDialogListener cdListener;
	String title,content;
//	public CustomDialog(Context context, int theme) {
//		super(context, theme);
//		// TODO Auto-generated constructor stub
//	}

//	Context context;

	public CustomDialog(Context context, int theme,String title,String content,CustomDialogListener cdListener){
		super(context, theme);
		this.cdListener=cdListener;
		this.title=title;
		this.content=content;
//		this.context=context;
	}
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		this.setContentView(R.layout.exit_dialog);
		this.setCanceledOnTouchOutside(false); //点击外部不会消失
		InitViews();
	}

	private void InitViews(){
		Dlg_title=(TextView) findViewById(R.id.Dlg_Title);
		Dlg_Content=(TextView) findViewById(R.id.Dlg_content);
		
		Dlg_title.setText(this.title);
		Dlg_Content.setText(this.content);
		
		Dlg_Yes=(Button) findViewById(R.id.Dlg_Yes);
		Dlg_No=(Button) findViewById(R.id.Dlg_No);
		Dlg_Yes.setOnClickListener(this);
		Dlg_No.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		cdListener.OnClick(v);
		dismiss();
	}


	@Override
	public void dismiss() {
		// TODO Auto-generated method stub
		System.out.println("dialog dismiss...");
		super.dismiss();
	}
	
}


public interface CustomDialogListener {
		public void OnClick(View view);
}


最后,介绍调用部分


			CustomDialog dialog=new CustomDialog(this, R.style.MyDialog, "退出应用","请选择是否退出应用\n",new CustomDialogListener() {
				
				@Override
				public void OnClick(View view) {
					// TODO Auto-generated method stub
					  switch(view.getId()){   
		                 case R.id.Dlg_Yes:
		         			LoginActivity.this.finish();
		                	 break;   
		                 case R.id.Dlg_No:
               
		                	 break;   
		 
		             }   
				}
	});
      dialog.show();






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值