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

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

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

P1

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

GIF1

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

GIF2

以下进入正题了

自己定义关闭

原生的用法,就不再介绍了,能够參照曾经的文章:Android系统对话框

思路:原理非常easy。我们创建Dialog的时候,能够给Dialog设置标题,内容。以及button,像 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();
        // 自己定义Positivebutton 实现点击以后不自定隐藏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("password不能为空");
                } 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="改动password" />

    </android.support.design.widget.TextInputLayout>
</RelativeLayout>

使用(參考)

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

接口回调(參考)

假设点击button以后,有一些操想要在主类操作,能够加入一个接口回调

package ……;

/**
 * Created by kqw on 2016/4/14.
 * Dialog回调接口
 */
public interface DialogOnClickListener {
    public void onPositiveButton();

    public void onNegativeButton();
}
posted @ 2017-07-23 20:36  jzdwajue  阅读(593)  评论(0编辑  收藏  举报