`
vocaloid
  • 浏览: 32726 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

android 手动设置对话框能否消失

阅读更多

有时候希望给对话框中的内容做验证,希望在验证错误时不能让对话框消失,但是在android dialog中,只要点击确认和返回就会自动关闭对话框,十分头疼。。。。

经过查阅网络资料,看到http://shufeipenglove-163-com.iteye.com/blog/1274977的这位大牛给出了用反射控制的方法,于是自己修改后的代码如下,基本没改什么,只是为了以后查阅方便哈。

 

 

 

package com.example.android_dialog_test;

import java.lang.reflect.Field;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.view.Menu;
import android.widget.EditText;

public class MainActivity extends Activity {
	EditText input;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		input = new EditText(this);
		Builder builder = new Builder(this);
		builder.setPositiveButton("check",
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// 不关闭
						setClosable(dialog, false);
						if ((input.getText().toString()).equals("123")) {
							// 关闭对话框
							setClosable(dialog, true);
							dialog.dismiss();
						}else{
							input.setText("输入错误!");
						}
					}
				}).setView(input)
				.setNegativeButton("cancel", new OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						setClosable(dialog, true);
						dialog.dismiss();
					}
				}).create().show();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

	private void setClosable(DialogInterface dialog, boolean b) {
		try {
			Field field = dialog.getClass().getSuperclass()
					.getDeclaredField("mShowing");
			field.setAccessible(true);
			field.set(dialog, b);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
分享到:
评论

相关推荐

    android7 关闭ANR对话框代码

    在Android 7.0的更新中,它可能包含了与自动关闭相关的逻辑,例如设置对话框的超时机制。当超时时间到达时,AppNotRespondingDialog会根据AppErrors的指示关闭自身。 这个自动关闭功能的实现细节可能涉及到以下步骤...

    android等待对话框(可定时自动关闭)

    在Android应用开发中,对话框(Dialog)是一种常见的用户交互元素,用于向用户显示临时信息或请求用户输入。本文将详细讲解如何实现一个具有“请稍候...”文本且能定时自动关闭的等待对话框,以及提供两种不同的定时...

    Android对话框精粹1

    - 如果系统提供的对话框样式不能满足需求,可以自定义布局文件作为对话框的内容视图。通过`setContentView(View)`方法将自定义布局加载到`AlertDialog`中。 - 对话框的背景、按钮样式等可以通过主题(Theme)来...

    Android中对话框与Toast之间的异同.pdf

    在Android应用开发中,对话框(Dialog)和Toast都是用于向用户提供临时信息的重要组件,但它们在使用场景、展示方式和交互性上有着明显的差异。本文将深入探讨这两种提示方式的异同,以便开发者能够更好地选择合适的...

    Android应用源码所有Dialog对话框.zip

    在Android开发中,Dialog对话框是一种非常常见的用户交互元素,用于在主界面之上显示临时性的信息或者进行一些简短的用户交互。这个"Android应用源码所有Dialog对话框.zip"文件很可能包含了各种类型的Dialog实现,为...

    自定义单选,多选对话框(android)

    而`PopupWindow`则需要我们手动设置布局、尺寸和位置,灵活性更高,但实现起来相对复杂。 在创建自定义单选或多选对话框时,我们通常会涉及到以下知识点: 1. **自定义布局**:首先,我们需要设计一个XML布局文件...

    android 来电去电 通话 弹出对话框显示号码信息

    5. **窗口管理**:在挂断电话后,需要让显示号码的对话框消失。可以为对话框设置一个OnDismissListener,或者在结束通话时手动调用dismiss()方法关闭对话框。同时,对于对话框的位置和显示效果,可以使用...

    MaterialDesign风格的进度对话框

    如果觉得手动实现比较繁琐,还可以借助第三方库,如`androidx.appcompat:appcompat`库(包含`ProgressDialog`)、`Material Dialogs`库等,它们提供了预设的Material Design风格的进度对话框,简化了开发工作。...

    Android 带动画的底部弹出视图

    对于DialogFragment,可以设置`setStyle(STYLE_NO_FRAME, android.R.style.Theme_DeviceDefault_Light_Dialog)`来去除默认的对话框样式,然后自定义窗口动画资源。对于CoordinatorLayout,动画效果由...

    Android中AlertDialog 点击按钮后不关闭对话框的功能

    总结起来,要在Android中实现`AlertDialog`点击按钮后不关闭对话框的功能,关键在于延迟设置Positive按钮的点击事件,并在事件处理中控制对话框的关闭。通过这种方式,可以实现更复杂的交互逻辑,如用户输入验证,而...

    MyAndroidTest_93_IOSDialog

    4. **位置和尺寸**:iOS的对话框通常会全屏显示并居中,但在Android中,我们可能需要手动调整对话框的位置和大小。可以通过修改`Dialog`的宽高和位置属性来实现。 5. **触摸边缘可关闭**:iOS的对话框往往支持用户...

    android 类似windows弹出的tooltip

    在Android开发中,有时我们需要创建一种提示性的UI元素,它能在用户交互时提供临时信息,类似于Windows操作系统中的Tooltip。这个工程“android 类似windows弹出的tooltip”提供了一个解决方案,它是一个非模态的...

    android弹出窗口,

    总之,Android的弹出窗口提供了多种与用户交互的方式,包括简单提示的Toast、模态对话框的AlertDialog、进度指示的ProgressDialog以及高度自定义的PopupWindow。了解并熟练掌握这些组件的使用,将有助于提升你的...

    Android:仿QQ 发表说说/上传照片 弹出框

    而`PopupWindow`则更为灵活,可以自由设置显示位置和大小,但需要手动处理生命周期。 在实现发表说说的功能时,我们需要一个包含输入框的布局。这个布局中,通常包含一个`EditText`用于用户输入文字,可能还会有一...

    012_android 之消息提示toast 和Context

    与对话框(Dialog)相比,Toast不会阻碍用户与应用的其他部分进行交互,因为它会自动消失,且不需用户手动关闭。 创建一个Toast非常简单,主要涉及以下步骤: 1. 获取上下文对象:通常使用Activity或Service的this...

    android 解决Toast重复显示问题

    当`Toast`显示完毕后,它会自动消失,无需手动处理。但如果在`Toast`显示期间连续调用了`makeText()`和`show()`方法,就会造成`Toast`的堆叠,导致重复显示。 问题通常出现在以下几个场景: 1. **连续调用**:在短...

    android popwindow弹窗位置显示

    这里`Gravity.NO_GRAVITY`表示不使用默认的重力,而是手动设置位置。`showAtLocation()`方法的最后两个参数是X轴和Y轴的偏移量,根据需求可以调整弹窗相对于按钮的位置。 除了基本的显示位置,`PopupWindow`还可以...

    android popupwindow的使用

    - PopupWindow不是Activity的一部分,因此不能包含Activity的布局或包含能与Activity生命周期绑定的组件。 - 若需要在PopupWindow中响应点击事件,需要确保设置了`setTouchable(true)`。 - PopupWindow默认不会...

    Android安卓经典设计例程源代码-PopupWindowSample.rar

    PopupWindow在Android开发中是一个非常重要的组件,它用于在界面上弹出一个窗口,这个窗口可以包含各种视图,如菜单、提示信息等。在"Android安卓经典设计例程源代码-PopupWindowSample"中,我们可以深入理解如何...

    安卓Android源码——PopupWindowSample.rar

    开发者需要手动处理资源释放,如在不需要时调用`popupWindow.dismiss();`。 7. **适配不同屏幕尺寸** 对于不同屏幕尺寸的设备,可能需要调整PopupWindow的大小和位置,以确保其在所有设备上表现良好。 8. **权限...

Global site tag (gtag.js) - Google Analytics