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();


 





你可能感兴趣的:(android)