我们在实际开发过程中,会遇到一个问题,我们的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="内容 " /> <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, "退出应用","请选择是否退出应用 ",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();