Android系统对话框——自定义关闭

来源:互联网 发布:双四选一数据选择器 编辑:程序博客网 时间:2024/05/17 01:53

Android系统对话框——自定义关闭

Dialog是我们在项目中经常用到的,5.x以后的Dialog也很好看,很安卓风,Android也给我们提供了新的包,低版本可以显示一样的效果。我们在使用的导入v7包下的Dialog即可。

P1

样式不是重点,我们点击Button以后,Dialog就会自动关闭,像这样:

GIF1

但是有的情况,我们是想要点击完Button以后和我们一些交互的,不要立即关闭,我们想要自定义关闭,像这样:

GIF2

下面进入正题了

自定义关闭

原生的使用方法,就不再介绍了,可以参照以前的文章:Android系统对话框

思路:原理很简单,我们创建Dialog的时候,可以给Dialog设置标题,内容,以及按钮,像 PositiveButton 等等。
我们以 PositiveButton 举例,我们想要点击 PositiveButton 以后不自动关闭,那我们自定义它的点击事件就好了。
在自定义之前,要首先保证我们添加了 PositiveButton,不然我们在获取 PositiveButton 的时候会报空指针,下面直接上代码

自定义Dialog

package com.kongqw.myapplication;import android.content.Context;import android.support.v7.app.AlertDialog;import android.text.TextUtils;import android.view.View;import android.widget.AutoCompleteTextView;import android.widget.Button;import android.widget.Toast;/** * Created by kqw on 2016/4/14. * 自定义Dialog */public class MyDialog extends AlertDialog.Builder {    private AlertDialog mDialog;    private AutoCompleteTextView mAutoCompleteTextView;    // private DialogOnClickListener mDialogOnClickListener;    public MyDialog(Context context) {        super(context);        // changeUserNameTool = new ChangeUserNameTool(context);        initDialog(context);    }    private void initDialog(Context context) {        View viewChangeUser = View.inflate(context, R.layout.view_mydialog, null);        mAutoCompleteTextView = (AutoCompleteTextView) viewChangeUser.findViewById(R.id.autoCompleteTextView);        setTitle("自定义Dialog");        setView(viewChangeUser);        setPositiveButton("确定", null);        setNegativeButton("取消", null);        mDialog = create();        mDialog.show();        // 自定义Positive按钮 实现点击以后不自定隐藏Dialog        setPositiveButton();    }    /**     * 在我们重新自定义PositiveButton的点击事件的时候,一定要保证之前添加了 PositiveButton     * 就是 setPositiveButton("确定", null);     * 不然下面的 getButton(AlertDialog.BUTTON_POSITIVE); 会报空指针     */    public void setPositiveButton() {        Button positiveButton = mDialog.getButton(AlertDialog.BUTTON_POSITIVE);        positiveButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // 测试                if (TextUtils.isEmpty(mAutoCompleteTextView.getText().toString())) {                    mAutoCompleteTextView.setError("密码不能为空");                } else {                    Toast.makeText(getContext().getApplicationContext(), "修改成功", Toast.LENGTH_SHORT).show();                    mDialog.dismiss();                }            }        });    }//    public void setDialogOnClickListener(DialogOnClickListener listener) {//        mDialogOnClickListener = listener;//    }}

View(参考)

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="horizontal">    <android.support.design.widget.TextInputLayout        android:layout_width="match_parent"        android:layout_height="wrap_content">        <AutoCompleteTextView            android:id="@+id/autoCompleteTextView"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_margin="@dimen/x45"            android:hint="修改密码" />    </android.support.design.widget.TextInputLayout></RelativeLayout>

使用(参考)

public void myDialog(View view) {    new MyDialog(this);}

接口回调(参考)

如果点击按钮以后,有一些操想要在主类操作,可以添加一个接口回调

package ……;/** * Created by kqw on 2016/4/14. * Dialog回调接口 */public interface DialogOnClickListener {    public void onPositiveButton();    public void onNegativeButton();}
3 2
原创粉丝点击