androidjava 消息框框

Android——点击对话框上按钮不关闭对话框 - 将安卓进行到底... - ITeye技术网站
博客分类:
有时候我没可能需要在点击按钮进行一些检测,但是并不想关闭次对话框(系统默认点击任何一个按钮则关闭对话框),处理方法如下:在点击事件下添加如下代码:
Field field = dialog.getClass()
.getSuperclass().getDeclaredField(
"mShowing");
field.setAccessible(true);
// 将mShowing变量设为false,表示对话框已关闭
field.set(dialog, false);
dialog.dismiss();
catch (Exception e)
将上面的代码加到哪个按钮的单击事件代码中,哪个按钮就再也无法关闭对话框了。如果要关闭对话框,只需再将mShowing设为true即可。要注意的是,在一个按钮里设置了mShowing变量,也会影响另一个按钮的关闭对话框功能,因此,需要在每一个按钮的单击事件里都设置mShowing变量的值。
marine8888
浏览: 308892 次
来自: 深圳
今天刚好需要这个效果,非常感谢!
不错!学习了!
lan恰 写道怎么感觉这个跟android没半毛钱关系的呢?C ...
学习了,但怎么设置单向边框呢?比如下边框,上边框!> Android 点击对话框之外的区域 对话框不关闭
Android 点击对话框之外的区域 对话框不关闭
qiurui2008 & &
发布时间: & &
浏览:85 & &
回复:0 & &
悬赏:0.0希赛币
Android 点击对话框以外的区域 对话框不关闭
按照默认方法创建对话框,当点击对话框以外的区域,对话框会关闭。可以在代码中添加:  setCanceledOnTouchOutside(false);之后,当点击对话框以外的区域,对话框就不会关闭了,只有点击了按钮或者返回键才会关闭对话框
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&增值电信业务经营许可证湘B2-Android第九章 弹出对话框_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
Android第九章 弹出对话框
A​n​d​r​o​i​d​第​九​章​ ​弹​出​对​话​框
大小:1.55MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢在Android的webview中定制js的alert,confirm和prompt对话框的方法 - 短裤党 - ITeye技术网站
博客分类:
1.首先继承android.webkit.WebChromeClient实现MyWebChromeClient。
2.在MyWebChromeClient.java中覆盖onJsAlert,onJsConfirm,onJsPrompt三个方法。
3.在初始化Webview时设置调用webview.setWebChromeClient(new MyWebChromeClient());
4.在Webview载入的html中使用window.alert,window.confirm,window.prompt方法,系统弹出的将是自定义实现的对应对话框。
MyWebChromeClient.java的代码如下:
import android.app.AlertD
import android.content.DialogI
import android.content.DialogInterface.OnCancelL
import android.content.DialogInterface.OnClickL
import android.content.DialogInterface.OnKeyL
import android.graphics.B
import android.os.M
import android.util.L
import android.view.KeyE
import android.webkit.JsPromptR
import android.webkit.JsR
import android.webkit.WebChromeC
import android.webkit.WebV
import android.widget.EditT
* /archives//199.html
//****************************************************************************
public class MyWebChromeClient extends WebChromeClient {
public void onCloseWindow(WebView window) {
super.onCloseWindow(window);
public boolean onCreateWindow(WebView view, boolean dialog,
boolean userGesture, Message resultMsg) {
return super.onCreateWindow(view, dialog, userGesture, resultMsg);
* 覆盖默认的window.alert展示界面,避免title里显示为“:来自file:////”
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("对话框")
.setMessage(message)
.setPositiveButton("确定", null);
// 不需要绑定按键事件
// 屏蔽keycode等于84之类的按键
builder.setOnKeyListener(new OnKeyListener() {
public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {
Log.v("onJsAlert", "keyCode==" + keyCode + "event="+ event);
// 禁止响应按back键的事件
builder.setCancelable(false);
AlertDialog dialog = builder.create();
dialog.show();
result.confirm();// 因为没有绑定事件,需要强行confirm,否则页面会变黑显示不了内容。
// return super.onJsAlert(view, url, message, result);
public boolean onJsBeforeUnload(WebView view, String url,
String message, JsResult result) {
return super.onJsBeforeUnload(view, url, message, result);
* 覆盖默认的window.confirm展示界面,避免title里显示为“:来自file:////”
public boolean onJsConfirm(WebView view, String url, String message,
final JsResult result) {
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("对话框")
.setMessage(message)
.setPositiveButton("确定",new OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
result.confirm();
.setNeutralButton("取消", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
result.cancel();
builder.setOnCancelListener(new OnCancelListener() {
public void onCancel(DialogInterface dialog) {
result.cancel();
// 屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题
builder.setOnKeyListener(new OnKeyListener() {
public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {
Log.v("onJsConfirm", "keyCode==" + keyCode + "event="+ event);
// 禁止响应按back键的事件
// builder.setCancelable(false);
AlertDialog dialog = builder.create();
dialog.show();
// return super.onJsConfirm(view, url, message, result);
* 覆盖默认的window.prompt展示界面,避免title里显示为“:来自file:////”
* window.prompt('请输入您的域名地址', '');
public boolean onJsPrompt(WebView view, String url, String message,
String defaultValue, final JsPromptResult result) {
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("对话框").setMessage(message);
final EditText et = new EditText(view.getContext());
et.setSingleLine();
et.setText(defaultValue);
builder.setView(et)
.setPositiveButton("确定", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
result.confirm(et.getText().toString());
.setNeutralButton("取消", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
result.cancel();
// 屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题
builder.setOnKeyListener(new OnKeyListener() {
public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {
Log.v("onJsPrompt", "keyCode==" + keyCode + "event="+ event);
// 禁止响应按back键的事件
// builder.setCancelable(false);
AlertDialog dialog = builder.create();
dialog.show();
// return super.onJsPrompt(view, url, message, defaultValue,
// result);
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
public void onReceivedIcon(WebView view, Bitmap icon) {
super.onReceivedIcon(view, icon);
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
public void onRequestFocus(WebView view) {
super.onRequestFocus(view);
浏览 11535
gundumw100
浏览: 2721989 次
来自: 上海
飞扬云 写道请问:关于onSaveInstanceState, ...
yyclang 写道 汗,你把EmptyLayout放到跟Sw ...
汗,你把EmptyLayout放到跟SwipeRefresh ...
weiran2222 写道你好,我这个方法不能用啊,怎么办?D ...程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Android研究院之应用程序对话框大合集(一)
Android研究院之应用程序对话框大合集(一)
围观6966次
编辑日期: 字体:
雨松MOMO带大家盘点Android 中的对话框
今天我用自己写的一个Demo 和大家详细介绍一个Android中的对话框的使用技巧。
1.确定取消对话框
对话框中有2个按钮 通过调用 setPositiveButton 方法 和 setNegativeButton 方法 可以设置按钮的显示内容以及按钮的监听事件。
我们使用AlerDialog 创建对话框
AlertDialog.Builder builder = new AlertDialog.Builder(MainDialog.this);
使用builder设置对话框的title button icon 等等
123456789101112131415
builder.setIcon(R.drawable.icon);builder.setTitle("你确定要离开吗?");builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {//这里添加点击确定后的逻辑showDialog("你选择了确定");}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {//这里添加点击确定后的逻辑showDialog("你选择了取消");}});builder.create().show();
这个dialog用于现实onClick后监听的内容信息
private void showDialog(String str) {new AlertDialog.Builder(MainDialog.this).setMessage(str).show();}
2.多个按钮信息框
1234567891011121314151617181920
AlertDialog.Builder builder = new AlertDialog.Builder(MainDialog.this);builder.setIcon(R.drawable.icon);builder.setTitle("投票");builder.setMessage("您认为什么样的内容能吸引您?");builder.setPositiveButton("有趣味的", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {showDialog("你选择了有趣味的");}});builder.setNeutralButton("有思想的", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {showDialog("你选择了有思想的");}});builder.setNegativeButton("主题强的", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {showDialog("你选择了主题强的");}});builder.create().show();
这个数组用于列表选择
123456789101112
final String[] mItems = {"item0","item1","itme2","item3","itme4","item5","item6"};&[java] view plaincopyAlertDialog.Builder builder = new AlertDialog.Builder(MainDialog.this);builder.setTitle("列表选择框");builder.setItems(mItems, new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {//点击后弹出窗口选择了第几项showDialog("你选择的id为" + which + " , " + mItems[which]);}});builder.create().show();
4.单项选择列表框
mSingleChoice 用于记录单选中的ID
1234567891011121314151617181920212223242526
int mSingleChoiceID = -1;&AlertDialog.Builder builder = new AlertDialog.Builder(MainDialog.this);&mSingleChoiceID = -1;builder.setIcon(R.drawable.icon);builder.setTitle("单项选择");builder.setSingleChoiceItems(mItems, 0, new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {mSingleChoiceID = whichButton;showDialog("你选择的id为" + whichButton + " , " + mItems[whichButton]);}});builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {if(mSingleChoiceID & 0) {showDialog("你选择的是" + mSingleChoiceID);}}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {&}});builder.create().show();
5.进度条框
点击进度条框按钮后 开启一个线程计算读取的进度 假设读取结束为 100
Progress在小于100的时候一直在线程中做循环++ 只到读取结束后,停止线程。
12345678910111213141516171819202122232425262728293031
mProgressDialog = new ProgressDialog(MainDialog.this);mProgressDialog.setIcon(R.drawable.icon);mProgressDialog.setTitle("进度条窗口");mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);mProgressDialog.setMax(MAX_PROGRESS);mProgressDialog.setButton("确定", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {//这里添加点击后的逻辑}});mProgressDialog.setButton2("取消", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {//这里添加点击后的逻辑}});mProgressDialog.show();new Thread(this).start();&public void run() {int Progress = 0;while(Progress & MAX_PROGRESS) {try {Thread.sleep(100);Progress++;mProgressDialog.incrementProgressBy(1);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}&}
6.多项选择列表框
MultiChoiceID 用于记录多选选中的id号 存在ArrayList中
选中后 add 进ArrayList
取消选中后 remove 出ArrayList。
1234567891011121314151617181920212223242526272829303132333435363738
ArrayListMultiChoiceID = new ArrayList();&AlertDialog.Builder builder = new AlertDialog.Builder(MainDialog.this);&MultiChoiceID.clear();&builder.setIcon(R.drawable.icon);builder.setTitle("多项选择");builder.setMultiChoiceItems(mItems,new boolean[]{false, false, false, false, false, false, false},new DialogInterface.OnMultiChoiceClickListener() {public void onClick(DialogInterface dialog, int whichButton,boolean isChecked) {if(isChecked) {MultiChoiceID.add(whichButton);showDialog("你选择的id为" + whichButton + " , " + mItems[whichButton]);}else {MultiChoiceID.remove(whichButton);}&}});builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {String str = "";int size = MultiChoiceID.size();for (int i = 0 ;i & size; i++) {str+= mItems[MultiChoiceID.get(i)] + ", ";}showDialog("你选择的是" + str);}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {&}});builder.create().show();
7.自定义布局
讲到自定义布局我就得多说一说了,为什么要多说一说呢?
其实自定义布局在Android的开发中非常重要 因为它能让开发者做出自己五彩缤纷的Activity 而不用去使用系统枯燥的界面。
自定义dialog有什么好处?
比如我们在开发过长当中 要通过介绍系统发送的一个广播弹出一个dialog . 但是dialog必需是基于activity才能呈现出来 如果没有activity 的话 程序就会崩溃。所以我们可以写一个自定义的 dialog 把它定义成一个activity
这样我们收到一条打开dialog的广播后 直接启动这个 activity 程序正常运行~~
这就是自定义dialog的好处。
注明:下面这个例子只是写了自定义dialog 没有把它单独的写在一个activity中 如果须要的话 可以自己改一下。
1234567891011121314151617181920
AlertDialog.Builder builder = new AlertDialog.Builder(MainDialog.this);LayoutInflater factory = LayoutInflater.from(this);final View textEntryView = factory.inflate(R.layout.test, null);builder.setIcon(R.drawable.icon);builder.setTitle("自定义输入框");builder.setView(textEntryView);builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {&EditText userName = (EditText) textEntryView.findViewById(R.id.etUserName);EditText password = (EditText) textEntryView.findViewById(R.id.etPassWord);showDialog("姓名 :" + userName.getText().toString() + "密码:" + password.getText().toString() );}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {&}});builder.create().show();
8.读取进度框
显示一个正在转圈的进度条loading
mProgressDialog = new ProgressDialog(this);mProgressDialog.setTitle("读取ing");mProgressDialog.setMessage("正在读取中请稍候");mProgressDialog.setIndeterminate(true);mProgressDialog.setCancelable(true);mProgressDialog.show();
最后如果你还是觉得我写的不够详细 不要紧我把源代码的下载地址贴出来 欢迎大家一起讨论学习 雨松MOMO希望可以和大家一起进步。
下载地址:
本文固定链接:
转载请注明:
MOMO与MO嫂提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!

我要回帖

更多关于 消息框 的文章

 

随机推荐