Android自定义Dialog弹窗获取Dialog中的控件ID

今天在开发的过程中,对于自定义的Dialog进行一个研究的探讨,然后终于弄出一些心得,赶紧记录下来。

自定义Dialog的思路,总的来说就是定义一个dialog的xml,然后对这个xml的控件进行封装显示,在到对应的界面点击相应的按钮弹出这个dialog就实现了。具体上图和代码吧。

Android自定义Dialog弹窗获取Dialog中的控件ID_第1张图片

首先是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" />

            

实现了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;

而为了获取到相应的控件,我们获取控件的相应的方法:
要获取dialog上面的资源控件,如下:

edit_text = (EditText) dialog.findViewById(R.id.edit_text);

然后在你需要弹出dialog的地方调用dialog的show方法就可以实现我们的dialog的弹出显示:

dialog.show();


还有一些dialog的方法,可能会用到的,这里也简单的说一下我用到的吧:

dialog.setCancelable(false);   //dialog点击空白地方不可取消,也可以设置成true,则是点击dialog外部可以取消
dialog.dismiss();   //取消dialog,但是dialog中已经输入的信息,你关闭后进到这个dialog还有显示

通过上述的内容,就可以实现我们的自定义的Dialog的显示操作,并且获取到dialog中的控件部分然后进行监听了。希望能够对大家有一定的帮助作用。


你可能感兴趣的:(小结)