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

本文介绍了如何在Android中创建自定义Dialog,包括设计XML布局、设置Dialog风格、创建Dialog类以及在点击事件中弹出Dialog。通过实例化自定义Dialog并监听其控件,可以实现对Dialog内控件的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在开发的过程中,对于自定义的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"
            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);	//联系按钮资源获取
        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中的控件部分然后进行监听了。希望能够对大家有一定的帮助作用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值