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

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

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

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

下面进入正题了

自定义关闭

原生的使用方法,就不再介绍了,可以参照以前的文章: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();
}

Android系统对话框——自定义关闭的更多相关文章

  1. Android系统对话框

    Android系统对话框 效果图 2个按钮的对话框 3个按钮的对话框 自定义View的对话框 单选对话框 多选对话框 列表框 Code XML <?xml version="1.0&q ...

  2. Android系统中自定义按键的短按、双击、长按事件

    在项目中碰到这样的问题: 由于系统中的按键在底层做了重新定义或者新增了按键,此时需要在APP层对按键事件(keyevent)做分解处理,模拟Android系统做法,把keyevent分解成: 1.单击 ...

  3. Android -- 系统和自定义Notification

    Notification是一种让你的应用程序在不使用Activity的情况下警示用户,Notification是看不见的程序组件警示用户有需要注意的事件发生的最好途径. 作为UI部分,Notifica ...

  4. Android系统编程入门系列之应用级文件在应用程序间的共享

    在上篇文章了解到应用级文件只能被其所创建的应用程序所访问,那么其他应用程序是不是就无论如何都无法访问了呢?肯定不是的,只要文件经过其创建的应用程序授权,还是可以被其他应用程序所访问的.这也就是应用级文 ...

  5. Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框

    原文出处:博主宇宙的极客http://www.cnblogs.com/nokiaguy/archive/2010/07/27/1786482.html 众所周知,AlertDialog类用于显示对话框 ...

  6. Android中制作自定义dialog对话框的实例

    http://www.jb51.net/article/83319.htm   这篇文章主要介绍了Android中制作自定义dialog对话框的实例分享,安卓自带的Dialog显然不够用,因而我们要继 ...

  7. 【转】Android 系统菜单与自定义菜单

    Android 系统菜单与自定义菜单实现方法如下:系统菜单显示DefaultMenu.java package com.wxz.menu; import com.wxz.menu.R; import  ...

  8. Android———最详细的系统对话框使用

    在实际应用开发中,用到系统对话框中的情况几乎是没有的.按开发流程来说,UI工程师都会给出每一个弹窗的样式,故而在实际开发中都是自定义弹窗的. 即使用到的地方不多,但是我们也是需要了解并且能熟练的运用它 ...

  9. Android———最详细的系统对话框(AlertDialog)详解

    在实际应用开发中,用到系统对话框中的情况几乎是没有的.按开发流程来说,UI工程师都会给出每一个弹窗的样式,故而在实际开发中都是自定义弹窗的. 即使用到的地方不多,但是我们也是需要了解并且能熟练的运用它 ...

随机推荐

  1. transition和animation做动画(css动画二)

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! translate:平移:是transform的一个属性: transform:变形:是一个静态属性,可以 ...

  2. [LeetCode] Longest Continuous Increasing Subsequence 最长连续递增序列

    Given an unsorted array of integers, find the length of longest continuous increasing subsequence. E ...

  3. [LeetCode] Teemo Attacking 提莫攻击

    In LLP world, there is a hero called Teemo and his attacking can make his enemy Ashe be in poisoned ...

  4. wifi 破解笔记

        最近小夜刚刚学习了无线WiFi的密码破解,感觉很神奇,不过以下操作都是作为学习测试的内容进行的,希望志同道合的小伙伴切不要触碰法律的红线哦!       话不多说,直接上硬菜.     实验环 ...

  5. STM32 - SYSTICK(系统滴答定时器)

    SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15).在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基.例如,为多个任务许以不同数目 ...

  6. Linux使用踩坑记

    Ubuntu安装坑: 1.对于新手第一次安装ubuntu,特殊情况会出现因为分辨率问题导致安装界面不全,无法进行下一步操作. 解决方案:使用alt+鼠标左键拖动屏幕Linux文件名乱码问题: 2.因为 ...

  7. [NOIp 2014]飞扬的小鸟

    Description Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉 ...

  8. linux内核中的链表

    1.内核中的链表 linux内核链表与众不同,他不是把将数据结构塞入链表,而是将链表节点塞入数据,在2.1内核中引入了官方链表,从此内核中所有的链表使用都采用此链表,千万不要在重复造车轮子了!链表实现 ...

  9. bzoj1531[POI2005]Bank notes 单调队列优化dp

    1531: [POI2005]Bank notes Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 559  Solved: 310[Submit][Sta ...

  10. HWM、PCTFREE、PCTUSED

    什么是水线(High Water Mark)? HWM通常增长的幅度为一次5个数据块,原则上HWM只会增大,不会缩小,即使将表中的数据全部删除,HWM还是为原值,由于这个特点,使HWM很象一个水库的历 ...