您的位置:首页 > 移动开发 > Android开发

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

2016-07-14 19:46 393 查看
今天在开发的过程中,对于自定义的Dialog进行一个研究的探讨,然后终于弄出一些心得,赶紧记录下来。

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



首先是dialog的xml实现后的效果图,代码实现如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="@drawable/shape"
android:gravity="center">

<RelativeLayout
android:id="@+id/line1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<TextView
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" />

<Button
android:id="@+id/close"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:background="@mipmap/close" />
</RelativeLayout>

<EditText
android:id="@+id/edit_text"

4000
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" />

<com.kegoal.view.ClearEditText
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" />

<LinearLayout
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">

<Button
android:id="@+id/btn_connect"
android:layout_width="115dp"
android:layout_height="45dp"
android:background="@mipmap/btn_connet"
android:text="电话咨询"
android:textColor="#de6654"
android:textSize="15sp" />

<Button
android:id="@+id/btn_commit"
android:layout_width="150dp"
android:layout_height="45dp"
android:layout_marginLeft="10dp"
android:background="@mipmap/btn_commit"
android:text="提交"
android:textColor="#646464"
android:textSize="15sp" />
</LinearLayout>
</RelativeLayout>
</RelativeLayout>


实现了dialog的xml还需要对我们dialog的style进行一个设计,在styles.xml中添加我们的dialog的style,下面会用到。

<style name="Dialog" parent="android:style/Theme.Dialog">
<item name="android:background">#00000000</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
</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);
bcc8
//联系按钮资源获取
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中的控件部分然后进行监听了。希望能够对大家有一定的帮助作用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息