有时候希望给对话框中的内容做验证,希望在验证错误时不能让对话框消失,但是在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();
}
}
}
分享到:
相关推荐
在Android 7.0的更新中,它可能包含了与自动关闭相关的逻辑,例如设置对话框的超时机制。当超时时间到达时,AppNotRespondingDialog会根据AppErrors的指示关闭自身。 这个自动关闭功能的实现细节可能涉及到以下步骤...
在Android应用开发中,对话框(Dialog)是一种常见的用户交互元素,用于向用户显示临时信息或请求用户输入。本文将详细讲解如何实现一个具有“请稍候...”文本且能定时自动关闭的等待对话框,以及提供两种不同的定时...
- 如果系统提供的对话框样式不能满足需求,可以自定义布局文件作为对话框的内容视图。通过`setContentView(View)`方法将自定义布局加载到`AlertDialog`中。 - 对话框的背景、按钮样式等可以通过主题(Theme)来...
在Android应用开发中,对话框(Dialog)和Toast都是用于向用户提供临时信息的重要组件,但它们在使用场景、展示方式和交互性上有着明显的差异。本文将深入探讨这两种提示方式的异同,以便开发者能够更好地选择合适的...
在Android开发中,Dialog对话框是一种非常常见的用户交互元素,用于在主界面之上显示临时性的信息或者进行一些简短的用户交互。这个"Android应用源码所有Dialog对话框.zip"文件很可能包含了各种类型的Dialog实现,为...
而`PopupWindow`则需要我们手动设置布局、尺寸和位置,灵活性更高,但实现起来相对复杂。 在创建自定义单选或多选对话框时,我们通常会涉及到以下知识点: 1. **自定义布局**:首先,我们需要设计一个XML布局文件...
5. **窗口管理**:在挂断电话后,需要让显示号码的对话框消失。可以为对话框设置一个OnDismissListener,或者在结束通话时手动调用dismiss()方法关闭对话框。同时,对于对话框的位置和显示效果,可以使用...
如果觉得手动实现比较繁琐,还可以借助第三方库,如`androidx.appcompat:appcompat`库(包含`ProgressDialog`)、`Material Dialogs`库等,它们提供了预设的Material Design风格的进度对话框,简化了开发工作。...
对于DialogFragment,可以设置`setStyle(STYLE_NO_FRAME, android.R.style.Theme_DeviceDefault_Light_Dialog)`来去除默认的对话框样式,然后自定义窗口动画资源。对于CoordinatorLayout,动画效果由...
总结起来,要在Android中实现`AlertDialog`点击按钮后不关闭对话框的功能,关键在于延迟设置Positive按钮的点击事件,并在事件处理中控制对话框的关闭。通过这种方式,可以实现更复杂的交互逻辑,如用户输入验证,而...
4. **位置和尺寸**:iOS的对话框通常会全屏显示并居中,但在Android中,我们可能需要手动调整对话框的位置和大小。可以通过修改`Dialog`的宽高和位置属性来实现。 5. **触摸边缘可关闭**:iOS的对话框往往支持用户...
在Android开发中,有时我们需要创建一种提示性的UI元素,它能在用户交互时提供临时信息,类似于Windows操作系统中的Tooltip。这个工程“android 类似windows弹出的tooltip”提供了一个解决方案,它是一个非模态的...
总之,Android的弹出窗口提供了多种与用户交互的方式,包括简单提示的Toast、模态对话框的AlertDialog、进度指示的ProgressDialog以及高度自定义的PopupWindow。了解并熟练掌握这些组件的使用,将有助于提升你的...
而`PopupWindow`则更为灵活,可以自由设置显示位置和大小,但需要手动处理生命周期。 在实现发表说说的功能时,我们需要一个包含输入框的布局。这个布局中,通常包含一个`EditText`用于用户输入文字,可能还会有一...
与对话框(Dialog)相比,Toast不会阻碍用户与应用的其他部分进行交互,因为它会自动消失,且不需用户手动关闭。 创建一个Toast非常简单,主要涉及以下步骤: 1. 获取上下文对象:通常使用Activity或Service的this...
当`Toast`显示完毕后,它会自动消失,无需手动处理。但如果在`Toast`显示期间连续调用了`makeText()`和`show()`方法,就会造成`Toast`的堆叠,导致重复显示。 问题通常出现在以下几个场景: 1. **连续调用**:在短...
这里`Gravity.NO_GRAVITY`表示不使用默认的重力,而是手动设置位置。`showAtLocation()`方法的最后两个参数是X轴和Y轴的偏移量,根据需求可以调整弹窗相对于按钮的位置。 除了基本的显示位置,`PopupWindow`还可以...
- PopupWindow不是Activity的一部分,因此不能包含Activity的布局或包含能与Activity生命周期绑定的组件。 - 若需要在PopupWindow中响应点击事件,需要确保设置了`setTouchable(true)`。 - PopupWindow默认不会...
PopupWindow在Android开发中是一个非常重要的组件,它用于在界面上弹出一个窗口,这个窗口可以包含各种视图,如菜单、提示信息等。在"Android安卓经典设计例程源代码-PopupWindowSample"中,我们可以深入理解如何...
开发者需要手动处理资源释放,如在不需要时调用`popupWindow.dismiss();`。 7. **适配不同屏幕尺寸** 对于不同屏幕尺寸的设备,可能需要调整PopupWindow的大小和位置,以确保其在所有设备上表现良好。 8. **权限...