- 浏览: 905420 次
最新评论
-
sunnyhappylg:
网上怎么复制了 这个页面内容这么多 没介绍怎么解决啊
服务器系统及软件常见漏洞 -
数据工厂:
我用JS实现的糗事百科的爬虫源码如下,运行步骤请参考我的git ...
[Python]网络爬虫(八):糗事百科的网络爬虫(v0.2)源码及解析 -
yzg0885:
解决了,谢谢你
Could not create the view: An unexpected exception was thrown. 电脑突然断电,myeclipse非正常关闭,出现错误 -
jjlin00:
楼主好,我今年报考南大软院,能分享计算机综合的资料吗,真心谢谢 ...
2013南京大学软件学院考研有感 -
govy.b:
楼主的资料能分享吗?QQ:282577229
2013南京大学软件学院考研有感
AlertDialog
将以上布局设为对话框的content view,并且定义ImageView 和 TextView的内容:
- ContextmContext=getApplicationContext();
- Dialogdialog=newDialog(mContext);
- dialog.setContentView(R.layout.custom_dialog);
- dialog.setTitle("CustomDialog");
- TextViewtext=(TextView)dialog.findViewById(R.id.text);
- text.setText("Hello,thisisacustomdialog!");
- ImageViewimage=(ImageView)dialog.findViewById(R.id.image);
- image.setImageResource(R.drawable.android);
使用前面所讲的方法显示对话框。
一个使用Dialog类建立的对话框必须有一个标题。如果你不调用setTitle(),那么标题区域会保留空白。如果你不希望有一个标题,那么你应该使用AlertDialog类来创建自定义对话框。然而,由于一个AlertDialog使用AlertDialog.Builder类来建立最方便,所以你没有方法使用setContentView(int),而是只能使用setView(View)。该方法接受一个View对象,所以你需要从xml中展开你的根View。
要展开一个xml布局,使用 getLayoutInflater() (或 getSystemService())取得LayoutInflater,然后调用inflate(int, ViewGroup),第一个参数为布局id,而第二个参数为根view的id。现在,你可以使用展开后的布局来找到View对象并定义ImageView和TextView元素的内容。然后实例化AlertDialog.Builder并使用setView(View)来为对话框设置展开后的布局。例如:
- AlertDialog.Builderbuilder;
- AlertDialogalertDialog;
- ContextmContext=getApplicationContext();
- LayoutInflaterinflater=(LayoutInflater)mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
- Viewlayout=inflater.inflate(R.layout.custom_dialog,
- (ViewGroup)findViewById(R.id.layout_root));
- TextViewtext=(TextView)layout.findViewById(R.id.text);
- text.setText("Hello,thisisacustomdialog!");
- ImageViewimage=(ImageView)layout.findViewById(R.id.image);
- image.setImageResource(R.drawable.android);
- builder=newAlertDialog.Builder(mContext);
- builder.setView(layout);
- alertDialog=builder.create();
显示对话框
对话框经常作为Activity的一部分来创建和显示。你通常应该从protected DialogActivity.onCreateDialog (int id)回调方法里创建对话框。当你使用这个回调函数时,Android系统会有效的设置这个Activity为每个对话框的所有者,从而自动管理每个对话框的状态并挂靠到Activity上。这样,每个对话框继承这个Activity的特定属性。比如,当一个对话框打开时,菜单键显示为这个Activity定义的选项菜单,音量键修改Activity使用的音频流。
- 注意:如果你决定在onCreateDialog()方法之外创建一个对话框,它将不会被附着到活动上。不过,你可以通过setOwnerActivity(Activity)把它附着到一个活动上。
当你想要显示一个对话框时,调用showDialog(int id)方法并传递一个唯一标识这个对话框的整数。
当对话框第一次被请求时,Android从你的Activity中调用onCreateDialog(int id),你应该在这里初始化这个对话框Dialog。这个回调方法被传以和showDialog(int id)相同的ID。当你创建这个对话框后,在Activity的最后返回这个对象。
在对话框被显示之前,Android还调用了可选的回调函数onPrepareDialog(int id, Dialog). 如果你想在每一次对话框被打开时改变它的任何属性,你可以定义这个方法。这个方法在每次打开对话框时被调用,而onCreateDialog(int) 仅在对话框第一次打开时被调用。如果你不定义onPrepareDialog(),那么这个对话框将保持和上次打开时一样。这个方法也被传递以对话框的ID,和在onCreateDialog()中创建的对话框对象。(个人理解是,在本Activity里第一次show某个Dialog,则先调用onCreateDialog,得到返回的Dialog对象并挂靠在Activity,保存Dialog对象的引用,然后才显示Dialog。这样子,下次再show Dialog就不用重新创建Dialog对象,而是重用旧的)
定义onCreateDialog(int)和onPrepareDialog(int, Dialog)回调函数的最佳方法是使用一个switch 语句来检查传递进来的id 参数。每个case 应该检查一个唯一的对话框ID然后创建和定义相应的对话框。比如,想象一下一个游戏使用两个不同的对话框:一个用来指示这个游戏已经暂停而另一个来指示游戏结束。首先,为每个对话框定义一个常量:
- staticfinalintDIALOG_PAUSED_ID=0;
- staticfinalintDIALOG_GAMEOVER_ID=1;
然后,为每一个ID用一个switch case定义这个onCreateDialog(int) 回调函数:
- protectedDialogonCreateDialog(intid){
- Dialogdialog;
- switch(id){
- caseDIALOG_PAUSED_ID:
- //dotheworktodefinethepauseDialog
- break;
- caseDIALOG_GAMEOVER_ID:
- //dotheworktodefinethegameoverDialog
- break;
- default:
- dialog=null;
- }
- returndialog;
- }
当是时候显示其中之一的对话框时,使用对话框ID调用showDialog(int):
- showDialog(DIALOG_PAUSED_ID);
消除对话框Dismissing a Dialog
当你准备关闭对话框时,你可以通过对这个对话框调用dismiss()来消除它。如果需要,你还可以从这个Activity中调用dismissDialog(int id)方法,这实际上将为你对这个对话框调用dismiss() 方法。
如果你想使用onCreateDialog(int id)方法来管理你对话框的状态(就如同在前面的章节讨论的那样),然后每次你的对话框消除的时候,这个对话框对象的状态将由该Activity保留。如果你决定不再需要这个对象或者清除该状态是重要的,那么你应该调用removeDialog(int id)。这将删除任何内部对象引用而且如果这个对话框正在显示,它将被消除。
使用消除侦听器Using dismiss listeners
如果你希望你的应用程序在一个对话框消亡的时候执行一些流程,那么你应该附着一个on-dismiss侦听器到对话框上。
- @Override
- protectedvoidonPrepareDialog(intid,Dialogdialog){
- switch(id){
- casePROGRESS_DIALOG:
- dialog.setOnDismissListener(newDialogInterface.OnDismissListener(){
- @Override
- publicvoidonDismiss(DialogInterfacedialog){
- Toast.makeText(getApplicationContext(),
- "dismisslistener!",
- Toast.LENGTH_SHORT)
- .show();
- }
- });
- }
- }
然而, 请注意对话框也可以被“取消”。这是一个表明对话框被用户显示取消的特殊情况。这将在用户按“返回”按钮时发生,或者这个对话框显示的调用cancel()(也许通过对话框上的一个“取消”按钮)。当一个对话框被取消时,这个OnDismissListener 依然会被通知到,但是如果你希望在对话框被显示取消时被通知到(而不是通常的消除方式),那么你应该通过setOnCancelListener()注册一个DialogInterface.OnCancelListener。
目前个人学习发现,一般情况下,调用dialog.cancel()就会触发onCancelLister。而点击AlertDialog的NegativeButton (Cancel/No)是不会触发的。对于setOnCancelListener()要注意的是,这里有两个setOnCancelListener(),但返回值不同:
- //AlertDialog.Builder调用的
- publicAlertDialog.BuildersetOnCancelListener(DialogInterface.OnCancelListeneronCancelListener)
- //Dialog调用的
- publicvoidsetOnCancelListener(DialogInterface.OnCancelListenerlistener)
警告对话框AlertDialog的使用
为了创建一个警告对话框,使用AlertDialog.Builder子类。通过AlertDialog.Builder(Context)获取一个构造器然后使用这个类的公共方法来定义警告对话框的所有属性。当得到构造器后,通过create().方法来获取警告对话框对象。有时我是不调用create()的,而是在设置好了后直接调用show()显示AlertDialog。
增加按钮Adding buttons
这就是我一开始很想知道的究竟如何添加Yes/No,Ok/Cancel这样的按钮。原来是通过setPositiveButton(...)响应Yes/Ok的点击,setNeutralButton(...)响应中立行为的点击,setNegativeButton(...)响应No/Cancel的点击。注意,只能各自设置一个按钮来响应点击事件。
- AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
- builder.setMessage("Areyousureyouwanttoexit?")
- .setCancelable(false)
- .setPositiveButton("Yes",newDialogInterface.OnClickListener(){
- publicvoidonClick(DialogInterfacedialog,intid){
- MyActivity.this.finish();
- }
- })
- .setNegativeButton("No",newDialogInterface.OnClickListener(){
- publicvoidonClick(DialogInterfacedialog,intid){
- dialog.cancel();
- }
- });
- AlertDialogalert=builder.create();
首先,为这个对话框添加一个消息setMessage(CharSequence)。然后,开始函数链并设置该对话框为不能取消not cancelable (因此用户不能使用返回按钮关闭这个对话框)。对每个按钮,使用任一set...Button() 方法,比如setPositiveButton(),该方法接受按钮名称以及一个定义用户选中按钮后所采取动作的DialogInterface.OnClickListener。
增加一个列表Adding a list
- finalCharSequence[]items={"Red","Green","Blue"};
- AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
- builder.setTitle("Pickacolor");
- builder.setItems(items,newDialogInterface.OnClickListener(){
- publicvoidonClick(DialogInterfacedialog,intitem){
- Toast.makeText(getApplicationContext(),items[item],Toast.LENGTH_SHORT).show();
- }
- });
- AlertDialogalert=builder.create();
首先,用setTitle(CharSequence)方法给对话框添加一个标题。然后,添加用setItems()添加一个可选项列表,该列表接受一组显示的items和一个DialogInterface.OnClickListener 来定义用户选中按钮后所采取动作。
增加复选框和单选按钮
要在对话框里创建一个多选项列表(checkboxes)或者单选项(radio buttons),可分别调用setMultiChoiceItems()和setSingleChoiceItems()方法。如果你在onCreateDialog()回调函数中创建这些可选列表,Android会帮你管理列表状态。只要这个活动是激活的,对话框会记住之前选中的items,但如果用户退出这个活动,用户选择将丢失。
注意: 为了在用户离开或暂停这个活动的时候能够保存选择,你必须通过活动生命期Activity Lifecycle来恰当的保存和恢复设置。为了永久保存选项,即使活动进程被完全终止,你需要使用数据存储Data Storage技术。
- finalCharSequence[]items={"Red","Green","Blue"};
- AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
- builder.setTitle("Pickacolor");
- builder.setSingleChoiceItems(items,-1,newDialogInterface.OnClickListener(){
- publicvoidonClick(DialogInterfacedialog,intitem){
- Toast.makeText(getApplicationContext(),items[item],Toast.LENGTH_SHORT).show();
- }
- });
- AlertDialogalert=builder.create();
setSingleChoiceItems()的第二个参数是一个checkedItem整型数值,指示了基于0的缺省选择项的位置。“-1”代表不会有默认选择项。
进度对话框Progress Dialog的使用
ProgressDialog是AlertDialog类的一个扩展,可以为一个未定义进度的任务显示一个旋转轮形状的进度动画,或者为一个指定进度的任务显示一个进度条。
可以简单地通过调用ProgressDialog.show()方法来显示一个进度对话框,而通过onCreateDialog(int)回调管理这个对话框是可选的,如下所示:
- ProgressDialog.show(this,//context
- "",//title
- "Loading.Pleasewait...",//message
- true);//进度是否是不确定的,这只和创建进度条有关
相关推荐
1、从Activity的TextView中获取字符串设置到AlertDialog的TextView和EditText中 2、将AlertDialog的EditText中的值设置到Activity的TextView中 新手在自定义AlertDialog上的疑问笔者猜测主要有两个: 1、自定义的...
alertDialog,android alertDialog大全
Android AlertDialog对话框 自定义实现遮罩层
android AlertDialog对话框的类型集合 ,比较全面的讲述了 AlertDialog 的 种类 , Demo 的综合性比较强 , Demo 可直接运行
android AlertDialog使用例程 一个在安卓平台上开发使用AlertDialog的例子 很实用很全哦
AlertDialog的各种用法,包含简单、复杂、列表、自定义、日期时间、进度条等的对话框
Android之简单的登录界面的实现、使用 AlertDialog和全局广播实现被强制下线功能、自定义一个带有清除按钮的EditText
android 使用alertdialog创建自定义对话框
警告框AlertDialog,实现点击弹出警告框,适合初学者下载学习
自定义AlertDialog(仿微信)
一个简单的自定义AlertDialog
Android 自定义实现一个AlertDialog对话框,提示框或警告框弹出式对话框,套用了系统Holo风格,生成符合系统主题的AlertDialog.Builder,可以分别定义弹出提示的标题文字及提示内容: builder.setTitle("Test ...
Android之AlertDialog源码
* 各种功能实现弹窗(自定义弹窗位置,添加动画效果) * 1.设置AlertDialog弹窗并且2秒后自动关闭(自定义关闭AlertDialog) * 2.设置popuwindow弹窗并且2秒后自动关闭 * 3.弹出后自带震动提示
Google官方推荐使用DialogFragment代替AlertDialog,很好的解决屏幕旋转产生的问题。。。