今天在开发的过程中,对于自定义的Dialog进行一个研究的探讨,然后终于弄出一些心得,赶紧记录下来。
自定义Dialog的思路,总的来说就是定义一个dialog的xml,然后对这个xml的控件进行封装显示,在到对应的界面点击相应的按钮弹出这个dialog就实现了。具体上图和代码吧。
首先是dialog的xml实现后的效果图,代码实现如下:
xml version="1.0" encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/help" android:layout_width="325dp" android:layout_height="wrap_content" android:background="@drawable/shape" android:padding="5dp"> android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:background="@drawable/shape" android:gravity="center"> android:id="@+id/line1" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="45dp" android:text="账号问题" android:textColor="#de6654" android:textSize="18sp" /> android:id="@+id/edit_text" android:layout_width="270dp" android:layout_height="210dp" android:layout_below="@id/line1" android:layout_centerHorizontal="true" android:layout_marginTop="10dp" android:background="@drawable/edit_shape" android:gravity="top" android:hint="输入您的问题" android:textColor="#8e8e8e" android:textColorHint="#8e8e8e" android:textSize="14sp" /> android:id="@+id/edit_connect" android:layout_width="270dp" android:layout_height="45dp" android:layout_below="@id/edit_text" android:layout_centerHorizontal="true" android:layout_marginTop="10dp" android:background="@mipmap/connect" android:hint="联系方式:QQ / 邮箱 / 联系电话" android:numeric="integer" android:paddingLeft="20dp" android:paddingRight="17dp" android:singleLine="true" android:textColor="#8e8e8e" android:textColorHint="#8e8e8e" android:textSize="14sp" /> android:layout_width="match_parent" android:layout_height="45dp" android:layout_below="@id/edit_connect" android:layout_gravity="bottom" android:layout_marginBottom="20dp" android:layout_marginTop="10dp" android:gravity="center" android:orientation="horizontal">
实现了dialog的xml还需要对我们dialog的style进行一个设计,在styles.xml中添加我们的dialog的style,下面会用到。
然后,针对我们的xml设计相应的MyDialog.java:
import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; /** * Created by Administrator on 2016/7/15 0015. */ public class MyDialog extends Dialog implements View.OnClickListener { private Context context; private EditText text, connect; private Button close, btn_commit, btn_connect; private LeaveMyDialogListener listener; public interface LeaveMyDialogListener { public void onClick(View view); } public MyDialog(Context context) { super(context); this.context = context; } public MyDialog(Context context, int theme, LeaveMyDialogListener listener) { super(context, theme); this.context = context; this.listener = listener; } //onCreate中对dialog的组件进行资源的获取以及监听的添加。 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.dialog_layout); close = (Button) findViewById(R.id.close); //关闭的按钮 btn_commit = (Button) findViewById(R.id.btn_commit); //提交按钮的资源 btn_connect = (Button) findViewById(R.id.btn_connect); //联系按钮资源获取 text = (EditText) findViewById(R.id.edit_text); connect = (EditText) findViewById(R.id.edit_connect); close.setOnClickListener(this); btn_connect.setOnClickListener(this); btn_commit.setOnClickListener(this); } @Override public void onClick(View v) { listener.onClick(v); } }
然后在你需要用到弹出dialog的地方添加事件,比如我用到的是点击一个按钮就弹出了这个dialog的窗体。
首先要对dialog进行一个声明:
MyDialog dialog;
然后我们还需要在获取资源的部分,对我们自定义的dialog进行对象的实例化,具体如下所示:
这部分,对我们声明的自定义的dialog进行实例化,然后这个MyDialog里面还存在我们dialog中控件的监听部分。在OnClick部分中,就可以对我们的控件来进行一个事件的监听。
dialog = new MyDialog(this, R.style.Dialog, new MyDialog.LeaveMyDialogListener() { @Override public void onClick(View view) { switch (view.getId()) { case R.id.close: dialog.dismiss(); edit_text.setText(""); edit_connect.setText(""); break;
edit_text = (EditText) dialog.findViewById(R.id.edit_text);
然后在你需要弹出dialog的地方调用dialog的show方法就可以实现我们的dialog的弹出显示:
dialog.show();
dialog.setCancelable(false); //dialog点击空白地方不可取消,也可以设置成true,则是点击dialog外部可以取消
dialog.dismiss(); //取消dialog,但是dialog中已经输入的信息,你关闭后进到这个dialog还有显示
通过上述的内容,就可以实现我们的自定义的Dialog的显示操作,并且获取到dialog中的控件部分然后进行监听了。希望能够对大家有一定的帮助作用。