微信朋友圈复制,内容复制

当前位置:&&
本页文章导读:
&&&&?jQuery UI Dialog 创建友好的弹出对话框实现代码&&&&&&
主要参数 jQuery UI Dialog常用的参数有: 1、autoOpen:默认true,即dialog方法创建就显示对话框 2、buttons:默认无,用于设置显示的按钮,可以是JSON和Array形式: {"确定":function(){},"取消":function(){}}.........&&&&?window.parent与window.openner区别介绍&&&&&&
今天总结一下js中几个对象的区别和用法: 首先来说说 parent.window与top.window的用法 "window.location.href"、"location.href"是本页面跳转 "parent.location.href"是上一层页面跳转 "top.location.href"是最外层的.........&&&&?JavaScript单元测试ABC&&&&&&
前言   当前,在软件开发中单元测试越来越受到开发者的重视,它能提高软件的开发效率,而且能保障开发的质量。以往,单元测试往往多见于服务端的开发中,但随着Web编程领域的分工逐.........
[1]jQuery UI Dialog 创建友好的弹出对话框实现代码
&&&&来源:&互联网& 发布时间:&
主要参数 jQuery UI Dialog常用的参数有: 1、autoOpen:默认true,即dialog方法创建就显示对话框 2、buttons:默认无,用于设置显示的按钮,可以是JSON和Array形式: {"确定":function(){},"取消":function(){}} [{text:"确定", click: function(){}},{text:"取消",click:function(){}}] 3、modal:默认false,是否模态对话框,如果设置为true则会创建一个遮罩层把页面其他元素遮住 4、title:标题 5、draggable:是否可手动,默认true 6、resizable:是否可调整大小,默认true 7、width:宽度,默认300 8、height:高度,默认"auto" 其他一些不太常用的参数: 1、closeOnEscape:默认true,按esc键关闭对话框 2、show:打开对话框的动画效果 3、hide:关闭对话框的动画效果 4、position:对话框显示的位置,默认"center",可以设置成字符串或数组: 'center', 'left', 'right', 'top', 'bottom' ['right','top'],通过上面的几个字符串组合(x,y) [350,100],绝对的数值(x,y) 5、minWidth:默认150,最小宽度 6、minHeight:默认150,最小高度 使用方法:
代码如下: $("...").dialog({ title: "标题", //...更多参数 });
主要方法 jQuery UI Dialog提供了一些方法来控制对话框,仅列出常用的: open:打开对话框 close:关闭对话框(通过close不会销毁,还能继续使用) destroy:销毁对话框 option:设置参数,即前面列出的参数 使用的时候作为dialog方法的参数:
代码如下: var dlg = $("...").dialog({ //...各种参数 }); dlg.dialog("option", { title: "标题" }); // 设置参数 dlg.dialog("open"); // 使用open方法打开对话框
主要事件 jQuery UI Dialog提供了一些事件,比如打开、关闭对话框的时候做一些额外的事情: open:打开时 close:关闭时 create:创建时 resize:调整大小时 drag:拖动时 使用方法同参数的使用方法,比如在打开时隐藏关闭按钮:
代码如下: $("...").dialog({ //...各种参数 open: function(event, ui) { $(".ui-dialog-titlebar-close", $(this).parent()).hide(); } });
具体使用 以下封装了一些常用的提示信息,不再详细解释:
代码如下: jQuery.extend(jQuery, { // jQuery UI alert弹出提示 jqalert: function(text, title, fn) { var html = '&div
id="dialog-message"&' + ' &p&' + ' &span
&&/span&' + text + ' &/p&' + '&/div&'; return $(html).dialog({ //autoOpen: false, resizable: false, modal: true, show: { effect: 'fade', duration: 300 }, title: title || "提示信息", buttons: { "确定": function() { var dlg = $(this).dialog("close"); fn && fn.call(dlg); } } }); }, // jQuery UI alert弹出提示,一定间隔之后自动关闭 jqtimeralert: function(text, title, fn, timerMax) { var dd = $( '&div
id="dialog-message"&' + ' &p&' + ' &span
&&/span&' + text + ' &/p&' + '&/div&'); dd[0].timerMax = timerMax || 3; return dd.dialog({ //autoOpen: false, resizable: false, modal: true, show: { effect: 'fade', duration: 300 }, open: function(e, ui) { var me = this, dlg = $(this), btn = dlg.parent().find(".ui-button-text").text("确定(" + me.timerMax + ")"); --me.timerM me.timer = window.setInterval(function() { btn.text("确定(" + me.timerMax + ")"); if (me.timerMax-- &= 0) { dlg.dialog("close"); fn && fn.call(dlg); window.clearInterval(me.timer); // 时间到了清除计时器 } }, 1000); }, title: title || "提示信息", buttons: { "确定": function() { var dlg = $(this).dialog("close"); fn && fn.call(dlg); window.clearInterval(this.timer); // 清除计时器 } }, close: function() { window.clearInterval(this.timer); // 清除计时器 } }); }, // jQuery UI confirm弹出确认提示 jqconfirm: function(text, title, fn1, fn2) { var html = '&div
id="dialog-confirm"&' + ' &p&' + ' &span
&&/span&' + text + ' &/p&' + '&/div&'; return $(html).dialog({ //autoOpen: false, resizable: false, modal: true, show: { effect: 'fade', duration: 300 }, title: title || "提示信息", buttons: { "确定": function() { var dlg = $(this).dialog("close"); fn1 && fn1.call(dlg, true); }, "取消": function() { var dlg = $(this).dialog("close"); fn2 && fn2(dlg, false); } } }); }, // jQuery UI 弹出iframe窗口 jqopen: function(url, options) { var html = '&div
id="dialog-window" title="提示信息"&' + ' &iframe src="' + url + '" frameBorder="0"
scrolling="auto" width="100%" height="100%"&&/iframe&' + '&/div&'; return $(html).dialog($.extend({ modal: true, closeOnEscape: false, draggable: false, resizable: false, close: function(event, ui) { $(this).dialog("destroy"); // 关闭时销毁 } }, options)); }, // jQuery UI confirm提示 confirm: function(evt, text, title) { evt = $.event.fix(evt); var me = evt. if (me.confirmResult) { me.confirmResult =
} jQuery.jqconfirm(text, title, function(e) { me.confirmResult = if (e) { if (me.href && $.trim(me.href).indexOf("javascript:") == 0) { $.globalEval(me.href); me.confirmResult =
} var t = me.type && me.type.toLowerCase(); if (t && me.name && (t == "image" || t == "submit" || t == "button")) { __doPostBack(me.name, ""); me.confirmResult =
} if (me.click) me.click(evt); }
以上代码还存在一个问题,就是每次弹出框关闭之后都没有销毁。 解决办法有(具体不演示): 在close事件里面destroy 把alert/confirm提供里的dialog实例设置成静态的 在外部调用使用单个dialog实例 演示程序 html代码如下:
代码如下: &div& &input type="button" id="button1" value="普通提示" /& &input type="button" id="button2" value="自动关闭提示" /& &input type="button" id="button3" value="确认提示" /& &input type="button" id="button4" value="确认提示2" /& &input type="button" id="button5" value="打开窗口" /& &/div&
相应js代码如下:
代码如下: $(function() { $("#button1").click(function() { $.jqalert("这是普通提示!"); }); $("#button2").click(function() { $.jqtimeralert("这是自动关闭的提示!", "自动关闭提示", function() { $.jqalert("时间到"); }); }); $("#button3").click(function() { $.jqconfirm("确定要这么做吗?", "确认提示", function() { $.jqalert("点了确定"); }, function() { $.jqalert("点了取消"); }); }); $("#button4").click(function(e) { if ($.confirm(e, "确定要这么做吗?")) $.jqalert("点了确定"); }); $("#button5").click(function(e) { $.jqopen("/", { title: "我的博客", width: 700, height: 500 }); }); });
对于服务器端控件使用confirm,可能需要如下方法:
代码如下: $("#button4").click(function(e) { if (!$.confirm(e, "确定要这么做吗?")) { e.stopPropagation();
额外再提一下,jQuery UI使用的字体都是以em为单位,可能会导致平常使用时dialog变得比较大,可以额外设置以下样式:
代码如下: body { font-size: 12 } // 默认字体大小 /*jQuery UI fakes*/ .ui-widget { font-size: 1 } .ui-dialog .ui-dialog-buttonpane { padding-top: .1 padding-bottom: .1 }
这样子,dialog的大小看起来就比较正常了。 在Telerik RadControls for asp.net ajax中使用 主要是针对telerik RadButton控件,定义如下两个函数:
代码如下: // 用于RadButton的confirm确认回调,即触发按钮点击 function radcallback(s) { return Function.createDelegate(s, function(argument) { if (argument) { this.click(); } }); } // 用于为RadButton添加confirm提示 function radconfirm2(textOrFn, title, callback) { return function(s, e) { $.jqconfirm(textOrFn, title, callback || radcallback(s)); //radconfirm(textOrFn, callback, 280, 50, null, title); e.set_cancel(true); }; }
然后可以这样使用:
代码如下:&telerik:RadButton ... OnClientClicking="radconfirm2('确定要这么做吗?')" /&
结尾 更多的资料请看jQuery UI Dialog官方演示:/demos/dialog。 下载地址 http://www./jiaoben/15574.html本文演示下载 lwme-jquery-ui-dialog-demo.7z作者:囧月 出处:/
[2]window.parent与window.openner区别介绍
&&&&来源:&互联网& 发布时间:&
今天总结一下js中几个对象的区别和用法: 首先来说说 parent.window与top.window的用法 "window.location.href"、"location.href"是本页面跳转 "parent.location.href"是上一层页面跳转 "top.location.href"是最外层的页面跳转 举例说明: 如果A,B,C,D都是jsp,D是C的iframe,C是B的iframe,B是A的iframe,如果D中js这样写 "window.location.href"、"location.href":D页面跳转 "parent.location.href":C页面跳转 "top.location.href":A页面跳转 现在终于明白了连接的时候target的用法了: _blank:重新打开一个窗口 _parent:父窗口执行重定向 _self:自身页面重定向 _top:第一个父窗口重定向 综上所述可知:parent.window:父窗口对象 top.window:第一个父窗口的对象 下面来重点看看window.parent与window.openner区别 window.parent 是iframe页面调用父页面对象,当我们想从iframe内嵌的页面中访问外层页面是可以直接利用window.parent获取; 例子如下: A.html
代码如下: &html& &head& &title&父页面&/title& &/head& &body& &form id="form1" action=""& &div& 输入值: &input type="text" name="username" id="username" /&&br /& &iframe src="b.html" width="400px" height="300px"&&/iframe& &/div& &/form& &/body& &/html&
代码如下: &html& &head& &script type="text/javascript"& function getpValue() { document.getElementByIdx_x_x_x("span1").innerText=window.parent.document.getElementByIdx_x_x_x("username"). } &/script& &/head& &body& &span&文本框值为:&/span&&span id="span1"&&/span&&br /& &input type="button" value="获取父窗口内的文本框值" onclick="getpValue();"& &/body& &/html&
window.opener 是window.open或超链接&a& 打开的子页面调用父页面对象 例子如下 a.html
代码如下: &html& &head& &title&父页面&/title& &script type="text/javascript"& function openB() { window.open('b.html','b','width=400,height=200,status=no,toolbar=no,menubar=no,location=no,resizable=yes,left=200,top=100'); } &/script& &/head& &body& &form id="form1" action=""& &div& 输入值: &input type="text" name="username" id="username" /&&br /& &input type="button" value="打开窗口B" onclick="openB();" /&&br /& &a href="b.html" target="_blank"&超链接打开B页面&/a& &/div& &/form& &/body& &/html&
代码如下: &html& &head& &script type="text/javascript"& function getpValue() { document.getElementByIdx_x_x_x("span1").innerText=window.opener.document.getElementByIdx_x_x_x("username"). } &/script& &/head& &body& &span&文本框值为:&/span&&span id="span1"&&/span&&br /& &input type="button" value="获取父窗口内的文本框值" onclick="getpValue();"& &/body& &/html&
下面来举几个常用的例子: parent.window与top.window一般在分割的页面即 frameset或iframe中使用 注销整个框架后返回到login.aspx:parent.window.location='Login.aspx'或者 top.window.location='Login.aspx' window.parent也是常在框架中使用, 刷新:window.parent.location.reload();或者刷新某个框架:window.parent.MainForm.location.reload(); 获得其他框架的元素值:window.parent.MainForm.form1.text1. window.opener主要是获得通过超链接或者 window.open() 打开本身页面的页面的一些,比如获得值,刷新等 刷新:window.opener.location.reload(); 获值:window.opener.document.getElement("txtName"). 后退:top.playFrame.history.go(-1); 前进: top.playFrame.history.go(1); 刷新: top.playFrame.location.reload(); 就总结到这里,这些对象很实用
[3]JavaScript单元测试ABC
&&&&来源:&互联网& 发布时间:&
前言   当前,在软件开发中单元测试越来越受到开发者的重视,它能提高软件的开发效率,而且能保障开发的质量。以往,单元测试往往多见于服务端的开发中,但随着Web编程领域的分工逐渐明细,在前端Javascript开发领域中,也可以进行相关的单元测试,以保障前端开发的质量。   在服务器端的单元测试中,都有各种各样的测试框架,在JavaScript中现在也有一些很优秀的框架,但在本文中,我们将自己动手一步步来实现一个简单的单元测试框架。   JS单元测试有很多方面,比较多的是对方法功能检查,对浏览器兼容性检查,本文主要谈第一种。 本文检查的JS代码是我以前写的一个JS日期格式化的方法,原文在这里(javascript日期格式化函数,跟C#中的使用方法类似),代码如下:
代码如下: Date.prototype.toString=function(format){ var time={}; time.Year=this.getFullYear(); time.TYear=(""+time.Year).substr(2); time.Month=this.getMonth()+1; time.TMonth=time.Month&10?"0"+time.Month:time.M time.Day=this.getDate(); time.TDay=time.Day&10?"0"+time.Day:time.D time.Hour=this.getHours(); time.THour=time.Hour&10?"0"+time.Hour:time.H time.hour=time.Hour&13?time.Hour:time.Hour-12; time.Thour=time.hour&10?"0"+time.hour:time. time.Minute=this.getMinutes(); time.TMinute=time.Minute&10?"0"+time.Minute:time.M time.Second=this.getSeconds(); time.TSecond=time.Second&10?"0"+time.Second:time.S time.Millisecond=this.getMilliseconds(); var oNumber=time.Millisecond/1000; if(format!=undefined && format.replace(/\s/g,"").length&0){ format=format .replace(/yyyy/ig,time.Year) .replace(/yyy/ig,time.Year) .replace(/yy/ig,time.TYear) .replace(/y/ig,time.TYear) .replace(/MM/g,time.TMonth) .replace(/M/g,time.Month) .replace(/dd/ig,time.TDay) .replace(/d/ig,time.Day) .replace(/HH/g,time.THour) .replace(/H/g,time.Hour) .replace(/hh/g,time.Thour) .replace(/h/g,time.hour) .replace(/mm/g,time.TMinute) .replace(/m/g,time.Minute) .replace(/ss/ig,time.TSecond) .replace(/s/ig,time.Second) .replace(/fff/ig,time.Millisecond) .replace(/ff/ig,oNumber.toFixed(2)*100) .replace(/f/ig,oNumber.toFixed(1)*10); } else{ format=time.Year+"-"+time.Month+"-"+time.Day+" "+time.Hour+":"+time.Minute+":"+time.S }
这段代码目前没有发现比较严重的bug,本文为了测试,我们把 .replace(/MM/g,time.TMonth) 改为 .replace(/MM/g,time.Month),这个错误是当月份小于10时,没有用两位数表示月份。   现在有这么一句话,好的设计都是重构出来的,在本文中也一样,我们从最简单的开始。 第一版:用最原始的alert   作为第一版,我们很偷懒的直接用alert来检查,完整代码如下:
代码如下: &!DOCTYPE html& &html& &head& &title&Demo&/title& &meta charset="utf-8"/& &/head& &body& &script type="text/javascript"& Date.prototype.toString=function(format){ var time={}; time.Year=this.getFullYear(); time.TYear=(""+time.Year).substr(2); time.Month=this.getMonth()+1; time.TMonth=time.Month&10?"0"+time.Month:time.M time.Day=this.getDate(); time.TDay=time.Day&10?"0"+time.Day:time.D time.Hour=this.getHours(); time.THour=time.Hour&10?"0"+time.Hour:time.H time.hour=time.Hour&13?time.Hour:time.Hour-12; time.Thour=time.hour&10?"0"+time.hour:time. time.Minute=this.getMinutes(); time.TMinute=time.Minute&10?"0"+time.Minute:time.M time.Second=this.getSeconds(); time.TSecond=time.Second&10?"0"+time.Second:time.S time.Millisecond=this.getMilliseconds(); var oNumber=time.Millisecond/1000; if(format!=undefined && format.replace(/\s/g,"").length&0){ format=format .replace(/yyyy/ig,time.Year) .replace(/yyy/ig,time.Year) .replace(/yy/ig,time.TYear) .replace(/y/ig,time.TYear) .replace(/MM/g,time.Month) .replace(/M/g,time.Month) .replace(/dd/ig,time.TDay) .replace(/d/ig,time.Day) .replace(/HH/g,time.THour) .replace(/H/g,time.Hour) .replace(/hh/g,time.Thour) .replace(/h/g,time.hour) .replace(/mm/g,time.TMinute) .replace(/m/g,time.Minute) .replace(/ss/ig,time.TSecond) .replace(/s/ig,time.Second) .replace(/fff/ig,time.Millisecond) .replace(/ff/ig,oNumber.toFixed(2)*100) .replace(/f/ig,oNumber.toFixed(1)*10); } else{ format=time.Year+"-"+time.Month+"-"+time.Day+" "+time.Hour+":"+time.Minute+":"+time.S }
} var date=new Date(); alert(date.toString("yyyy")); alert(date.toString("MM")); &/script& &/body& &/html&
运行后会弹出 2012 和 4 ,观察结果我们知道 date.toString("MM")方法是有问题的。   这种方式很不方便,最大的问题是它只弹出了结果,并没有给出正确或错误的信息,除非对代码非常熟悉,否则很难知道弹出的结果是正是误,下面,我们写一个断言(assert)方法来进行测试,明确给出是正是误的信息。 第二版:用assert进行检查   断言是表达程序设计人员对于系统应该达到状态的一种预期,比如有一个方法用于把两个数字加起来,对于3+2,我们预期这个方法返回的结果是5,如果确实返回5那么就通过,否则给出错误提示。   断言是单元测试的核心,在各种单元测试的框架中都提供了断言功能,这里我们写一个简单的断言(assert)方法:
代码如下: function assert(message,result){ if(!result){ throw new Error(message); }
这个方法接受两个参数,第一个是错误后的提示信息,第二个是断言结果   用断言测试代码如下:
代码如下: var date=new Date(); try{ assert("yyyy should return full year",date.toString("yyyy")==="2012"); }catch(e){ alert("Test failed:"+e.message); } try{ assert("MM should return full month",date.toString("MM")==="04"); } catch(e){ alert("Test failed:"+e.message); }
  运行后会弹出如下窗口:
第三版:进行批量测试   在第二版中,assert方法可以给出明确的结果,但如果想进行一系列的测试,每个测试都要进行异常捕获,还是不够方便。另外,在一般的测试框架中都可以给出成功的个数,失败的个数,及失败的错误信息。   为了可以方便在看到测试结果,这里我们把结果用有颜色的文字显示的页面上,所以这里要写一个小的输出方法PrintMessage:
代码如下: function PrintMessage(text,color){ var div=document.createElement("div"); div.innerHTML= div.style.color= document.body.appendChild(div);
  下面,我们就写一个类似jsTestDriver中的TestCase方法,来进行批量测试:
代码如下: function testCase(name,tests){ var successCount=0; var testCount=0; for(var test in tests){ testCount++; try{ tests[test](); PrintMessage(test+" success","#080"); successCount++; } catch(e){ PrintMessage(test+" failed:"+e.message,"#800"); } } PrintMessage("Test result: "+testCount+" tests,"+successCount+" success, "+ (testCount-successCount)+" failures","#800"); }
  测试代码:
代码如下: var date=new Date(); testCase("date toString test",{ yyyy:function(){ assert("yyyy should return 2012",date.toString("yyyy")==="2012"); }, MM:function(){ assert("MM should return 04",date.toString("MM")==="04"); }, dd:function(){ assert("dd should return 09",date.toString("dd")==="09"); } });
  结果为:
这样我们一眼就可以看出哪个出错了。但这样是否就完美了呢,我们可以看到最后那个测试中 var date=new Date()是放在testCase外面定义的,并且整个testCase的测试代码中共用了date,这里因为各个方法中没有对date的值进行修改,所以没出问题,如果某个测试方法中对date的值修改了呢,测试的结果就是不准确的,所以在很多测试框架中都提供了setUp和tearDown方法,用来对统一提供和销毁测试数据,下面我们就在我们的testCase中加上setUp和tearDown方法。 第四版:统一提供测试数据的批量测试   首先我们添加setUp和tearDown方法:
代码如下: testCase("date toString",{ setUp:function(){ this.date=new Date(); }, tearDown:function(){ delete this. }, yyyy:function(){ assert("yyyy should return 2012",this.date.toString("yyyy")==="2012"); }, MM:function(){ assert("MM should return 04",this.date.toString("MM")==="04"); }, dd:function(){ assert("dd should return 09",this.date.toString("dd")==="09"); } });
  由于setUp和tearDown方法不参与测试,所以我们要修改testCase代码:
代码如下: function testCase(name,tests){ var successCount=0; var testCount=0; var hasSetUp=typeof tests.setUp == "function"; var hasTearDown=typeof tests.tearDown == "function"; for(var test in tests){ if(test==="setUp"||test==="tearDown"){
} testCount++; try{ if(hasSetUp){ tests.setUp(); } tests[test](); PrintMessage(test+" success","#080"); if(hasTearDown){ tests.tearDown(); } successCount++; } catch(e){ PrintMessage(test+" failed:"+e.message,"#800"); } } PrintMessage("Test result: "+testCount+" tests,"+successCount+" success, "+ (testCount-successCount)+" failures","#800"); }
  运行后的结果跟第三版相同。 小结及参考文章   上面说了,好的设计是不断重构的结果,上面的第四版是不是就完美了呢,远远没有达到,这里只是一个示例。如果大家需要这方面的知识,我后面可以再写写各个测试框架的使用。   本文只是JS单元测试入门级的示例,让初学者对JS的单元测试有个初步概念,属于抛砖引玉,欢迎各位高人拍砖补充。   本文参考了《测试驱动的JavaScript开发》(个人觉得还不错,推荐下)一书第一章,书中的测试用例也是一个时间函数,不过写的比较复杂,初学者不太容易看懂。作者:Artwl
最新技术文章:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!
(C)2012-,E-mail:www_169it_(请将#改为@)3359人阅读
Android(55)
&&&&1&.Dialog常用类型
警告对话框:Alertialog
进度对话框:ProgressDialog
日期选择对话框:DatePickerDialog
时间选择对话框:TimePickerDialog
自定义对话框:从Dialog继承
2.Dialog的创建方式
一是直接new一个Dialog对象,然后调用Dialog对象的show和dismiss方法来控制对话框的显示和隐藏。
二是在Activity的onCreateDialog(int id)方法中创建Dialog对象并返回,然后调用Activty的showDialog(int id)和dismissDialog(int id)来显示和隐藏对话框。
区别在于通过第二种方式创建的对话框会继承Activity的属性,比如获得Activity的menu事件等。
3.onCreateDialog的使用
& & & & &一个Dialog一直被创建及作为Activity的一部分显示的时候,一般情况下,你应该使用回调方法onCreateDialog(int)创建Dialog,当你使用这个方法的时候,Android系统会自动的管理每一个Dialog的状态,并有效的控制着每个Dialog,同样的,每个Dialog也会继承Activity中的某些特性。就像当一个Dialog显示的时候,按下菜单键显示Activity定义的选项菜单或者使用音量键调整音视频音量的大小,当你想显示一个Dialog的时候,调用showDialog(int)方法,传递的参数是唯一能标识你想显示的对话框的整数。
&&&&&&&&当一个Dialog第一次被调用的时候,Android系统会调用你应该实例化Dialog的Activity的onCreateDialog方法(这里需要注意只有在第一次创建的时候才会调用),这个方法会启动你从showDialog(int)方法里面传递的那个ID参数所定义的Dialog,当你创建成功后,在方法的最后回返回这个Dialog。
&&&&&&& 在Dialog显示之前,Android也会调用回调函数onPrepareDialog(int,Dialog),当你想在这个Dialog每次打开的时候一些属性得到改变,你可以定义这个方法,这个方法会在每次Dialog打开的时候被调用,onCreateDialog()只会在Dialog第一次打开的时候被调用,(此时调用顺序onCreateDialog-&onPrepareDialog)如果你没有定义onPrepareDialog(),每次返回的Dialog都是和第一次显示的Dialog一样,这个方法通过参数会传递一个ID和在onCreateDialog()方法中创建的Dialog。(将要显示的Dialog和它的ID)
&&&&&&&&& 当你准备关闭对话框时,你可以通过对这个对话框调用dismiss()来消除它。如果需要,你还可以从这个Activity中调用dismissDialog(int id) 方法,这实际上将为你对这个对话框调用dismiss()
方法。 如果你想使用onCreateDialog(int id) 方法来管理你对话框的状态,然后每次你的对话框消除的时候,这个对话框对象的状态将由该Activity保留。如果你决定不再需要这个对象或者清除该状态是重要的,那么你应该调用removeDialog(int id)。这将删除任何内部对象引用而且如果这个对话框正在显示,它将被消除。
&&&&&& 最好的定义onCreateDialog()和onPrepareDialog()中使用switch对传入的id进行下判断,每一个case对应着要启动的Dialog的ID,像下面这个例子一样:
调用方式:showDialog(DIALOG_SOURCE_MESSAGE);
4.ProgressDialog&和ProgressBar
一 、ProgressDialog
&&&&& ProgressDialog与ProgressBar在UI中动态显示一个加载图标显示程序运行状态。
&&&&& ProgressDialog是继承自Android.app.ProgressDialog所设计的互动对话窗口,使用时,必须新建ProgressDialog对象,在运行时会弹出“对话框”作为提醒,此时应用程序后台失去焦点(即此时无法对UI组件进行操作),直到进程结束后,才会将控制权交给应用程序,如果在Activity当中不希望后台失焦,又希望提示User有某后台程序正处于忙碌阶段,那么ProgressBar就会派上用场了。
&&&&&& && 当有ProgressDialog时,点击back时,会首先取消ProgressDialog ,以上代码可以监听进度条被取消事件(也就是点击Back键取消ProgressDialog),此时可以在这里作一些取消后台操作的处理。
&&&&&& 二、ProgressBar
&&&&&&&& XML重要属性
&&&&&&&& android:progressBarStyle:默认进度条样式
&&&&&&&& android:progressBarStyleHorizontal:水平样式
&&&&&&&& 重要方法
&&&&&&&& getMax():返回这个进度条的范围的上限
&&&&&&&& getProgress():返回进度
&&&&&&&& getSecondaryProgress():返回次要进度
&&&&&&&& incrementProgressBy(int diff):指定增加的进度
&&&&&&&& isIndeterminate():指示进度条是否在不确定模式下
&&&&&&&& setIndeterminate(boolean indeterminate):设置不确定模式下
&&&&&&&&& setVisibility(int v):设置该进度条是否可视
&&&&&&&&&& 重要事件
&&&&&&&&&& onSizeChanged(int w, int h, int oldw, int oldh):当进度值改变时引发此事件
5.DatePickerDialog
Calendar aCalendar = Calendar.getInstance();
int year = aCalendar.get(Calendar.YEAR);
int monthOfYear = aCalendar.get(Calendar.MONTH);
int dayOfMonth = aCalendar.get(Calendar.DAY_OF_MONTH);
// 时间选择对话框
DatePickerDialog dialog = new DatePickerDialog(this,
new OnDateSetListener() {
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
Log.e(&DatePickerDialog onDateSet&, year + &年&
+ (monthOfYear + 1) + &月& + dayOfMonth + &日&);
}, year, monthOfYear, dayOfMonth);
dialog.show();
&&&&&&&&&&&&&&&&&&&&
&6.TimePickerDialog
TimePickerDialog timePickerDialog = new TimePickerDialog(this,
new OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay,
int minute) {
//设置时间后调用
Log.e(&TimePickerDialog onTimeSet&, hourOfDay + &时&
+ minute + &分&);
}, aCalendar.get(Calendar.HOUR_OF_DAY), Calendar.MINUTE, false);
timePickerDialog.show();
7.Alertialog
AlertDialog.Builder builder = new Builder(this);
builder.setTitle(&喜好调查&);
builder.setMessage(&你喜欢李连杰的电影吗&);// 设置显示的消息
builder.setView(new EditText(this));// 设置dialog内容
builder.setIcon(R.drawable.ic_launcher);
builder.setCancelable(false);// 设置是否可以点击back键取消,默认为可以的
builder.setItems(new String[] {}, new OnClickListener() {// 一组简单的列表项
public void onClick(DialogInterface dialog, int which) {
// 设置内容为单选框
builder.setSingleChoiceItems(new String[] {}, 0, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
builder.setNegativeButton(&不喜欢&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
builder.setPositiveButton(&喜欢&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
builder.setNeutralButton(&一般&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
builder.show();
8.自定义Dialog
&&&&&&&&自定义Dialog就是extends Dialog 然后通过setContentView设置其布局
public static MyDialog show(Context context, CharSequence message, boolean cancelable,OnCancelListener cancelListener) {
MyDialog dialog = new MyDialog(context,R.style.MyDialog);
dialog.setTitle(&&);
dialog.setContentView(R.layout.mydialog);
if(message == null || message.length() == 0) {
dialog.findViewById(R.id.message).setVisibility(View.GONE);
TextView txt = (TextView)dialog.findViewById(R.id.message);
txt.setText(message);
dialog.setCancelable(cancelable);
dialog.setOnCancelListener(cancelListener);
dialog.getWindow().getAttributes().gravity=Gravity.CENTER;
dialog.show();
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:886597次
积分:6196
积分:6196
排名:第3829名
原创:98篇
转载:40篇
评论:85条
(1)(2)(27)(8)(6)(2)(3)(8)(13)(6)(3)(5)(10)(18)(10)(15)(1)

我要回帖

更多关于 微信朋友圈内容生成器 的文章

 

随机推荐