android支持丰富的对话框,常用4中对话框:

  1.AlertDialog

  2.ProgressDialog:进度对话框,这个对话框只是对进度条的封装

  3.DatePickerDialog:日期选择对话框,这个对话框只是对DatePicker的包装

  4.TimePickerDialog:时间选择对话框,这个对话框只是对TimePicker的包装

AlertDialog

==>

AlertDialog支持的4中预定义对话框:

  1.带消息、带N个按钮的提示对话框

  2.带消息、带N个按钮的列表对话框

  3.带多个单选列表项,带N个按钮的对话框

  4.带多个多选列表项,带N个按钮的对话框

AlertDialog,也可以创建界面自定义对话框,使用AlertDialog创建对话框的大致步骤如下:

  1.创建AlertDialog.Builder对象——该对象是AlertDialog的创建器

  2.调用AlertDialog.Builder的方法对话框设置图标、标题、内容等

  3.调用AlertDialog.Builder的create()方法创建AlertDialog对话框

  4.调用AlertDialog.Builder的Show()方法显示对话框

实例一

布局文件==》
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" > <EditText
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/> <Button
android:id="@+id/btnTest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="test" /> </LinearLayout> 代码实现==》
package com.example.myalertdialog1; import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.text.style.BulletSpan;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText; public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnTest = (Button) this.findViewById(R.id.btnTest);
// final EditText edit = (EditText) findViewById(R.id.edit);
// 定义一个AlertDialog对象
final Builder builder = new AlertDialog.Builder(this);
btnTest.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
builder.setIcon(R.drawable.one);
builder.setTitle("自定义普通对话框");
builder.setMessage("提示对话框");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
EditText edit = (EditText) findViewById(R.id.edit);
edit.setText("您单击了确定");
}
}); builder.setNegativeButton("取消",new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
EditText edit = (EditText) findViewById(R.id.edit);
edit.setText("您单击了取消");
}
}); builder.create().show();
}
});
} @Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

实现效果:

注意:

以上实例实现了设置对话框图标、标题、等属性,并为按钮添加了两个按钮,除此之外,AlertDialog.Builder还提供了如下方法添加按钮:

  setNeutralButton(charSequence text,DialogInterface.OnClickListener listener)——添加一个装饰性按钮==》android的对话框一共可以生成三个对话框。

使用AlertDialog创建列表对话框

AlertDialog.Builder除了提供了setMessage()设置对话框所显示的消息之外,还提供了如下方法来设置对话框显示列表内容:

  setItems(int itemsId,DialogInterface.OnClickListener listener):创建普通列表对话框;

  setMultiChoiceItems(CharSquence[] items,boolean[] checkedItems,DialogInterface.OnMultiChoiceListener listener):创建多选列表对话框;

  setSingleChoiceItems(CharSquence[] items,int checkedItem,DialogInterface.OnClickListener listener):创建单选按钮列表对话框;

  setAdapter(ListAdapter adapter,DialogInterface.OnClickListener listener):创建根据ListAdapter提供列表项的列表对话框;

注意:AlertDialog.Builder除了提供以上方法,还提供了一些重载的方法,用于为对话框添加列表项。

实例二:通过setItems方法实现列表对话框

布局文件==》
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" > <TextView
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/> <Button
android:id="@+id/btnTest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="test" /> </LinearLayout> 代码实现==》
package com.example.myalertdialog2; import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.graphics.Color;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView; public class MainActivity extends Activity
{ @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Button btn = (Button) this.findViewById(R.id.btnTest);
final TextView tv = (TextView) this.findViewById(R.id.edit);
final Builder builder = new AlertDialog.Builder(this);
btn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
builder.setIcon(R.drawable.one);
builder.setTitle("简单列表对话框");
builder.setItems(new String[]
{ "0001", "0002", "0003" }, new AlertDialog.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
switch (which)
{
case 0:
tv.setBackgroundColor(Color.RED);
break;
case 1:
tv.setBackgroundColor(Color.GREEN);
break;
case 2:
tv.setBackgroundColor(Color.BLUE);
break;
}
}
});
builder.create().show();
}
});
} @Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

实现效果:

注意:

如果调用AlertDialog.Builder是setSingleChoiceItems、setMultieChoiceItems、setAdapter方法设置列表项,则可创建单选列表对话框、多选列表对话框、自定义列表对话框。

实例三:使用AlertDialog创建单选按钮列表框

布局文件==》
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" > <TextView
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/> <Button
android:id="@+id/btnTest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="test" /> </LinearLayout> 代码实现==》
package com.example.myalertdialog3; import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.graphics.Color;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView; public class MainActivity extends Activity
{
private final int Sing_Dialog = 0x113;
TextView tv; @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Button btn = (Button) this.findViewById(R.id.btnTest);
tv = (TextView) this.findViewById(R.id.edit); btn.setOnClickListener(new OnClickListener()
{
@SuppressWarnings("deprecation")
@Override
public void onClick(View v)
{
showDialog(Sing_Dialog);
}
});
} // 重写onCreateDialog方法创建对话框
@Override
protected Dialog onCreateDialog(int id, Bundle args)
{
switch (id)
{
case Sing_Dialog:
Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.one);
builder.setTitle("简单列表对话框");
// 1 代表默认选择第二项,索引从0开始
builder.setSingleChoiceItems(new String[]
{ "0001", "0002", "0003" }, 1, new AlertDialog.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
switch (which)
{
case 0:
tv.setBackgroundColor(Color.RED);
break;
case 1:
tv.setBackgroundColor(Color.GREEN);
break;
case 2:
tv.setBackgroundColor(Color.BLUE);
break;
}
}
});
// 添加一个确定按钮——用于关闭对话框
builder.setPositiveButton("确定", null);
return builder.create();
}
return null;
} @Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

运行效果:

注意:

通过调用AlertDialog.Builder的setSingleChoiceItems方法即可创建一个单选列表对话框;

该实例采用基于Activity回调的方式开发对话框。

采用基于Activity回调的方式开发对话框操作步骤:

  1.重写Activity的OnCreateDialog(),该方法返回一个对话框。该方法内部一样通过AlertDialog.Builder或DatePickerDialog等创建对话框并返回。

  2.程序需要显示对话框时调用Activity的ShowDialog()即可。

实例四:使用AlertDialog创建多选列表对话框

布局文件==》
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" > <EditText
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/> <Button
android:id="@+id/btnTest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="test" /> </LinearLayout> 代码实现==》
package com.example.myalertdialog4; import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText; public class MainActivity extends Activity
{ private final int Multi_Dialog = 0x113;
private boolean[] CheckedStatus = new boolean[]
{ true, false, true };
private String[] Colors = new String[]
{ "0001", "0002", "0003" };
private EditText etTest; @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Button btn = (Button) this.findViewById(R.id.btnTest);
etTest = (EditText) this.findViewById(R.id.edit);
btn.setOnClickListener(new OnClickListener()
{
@SuppressWarnings("deprecation")
@Override
public void onClick(View v)
{
showDialog(Multi_Dialog);
}
});
} // 重写onCreateDialog方法创建对话框
@Override
protected Dialog onCreateDialog(int id, Bundle args)
{
switch (id)
{
case Multi_Dialog:
Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.one);
builder.setTitle("多选列表对话框");
builder.setMultiChoiceItems(Colors, CheckedStatus, new AlertDialog.OnMultiChoiceClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked)
{
String tag="您选择了:";
for (int i = 0; i < CheckedStatus.length; i++)
{
if(CheckedStatus[i])
{
tag+=Colors[i]+"、";
}
} etTest.setText(tag);
}
});
// 添加一个确定按钮——用于关闭对话框
builder.setPositiveButton("确定", null);
return builder.create();
}
return null;
} @Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

运行效果:

注意:

只需要调用AlertDialog.Builder的setMultieChoiceItems方法即可创建一个多选列表框的对话框。

调用AlertDialog.Builder的setMultieChoiceItems方法时,需要传人一个boolean[]参数,该参数的作用:

  1.设置初始化时选中那些列表项;

  2.boolean[]参数还可用于动态地获取多选列表中列表框的选中状态。

实例五:使用AlertDialog创建自定义对话框

注意:使用AlertDialog可以创建自定义对话框,Eg:调用AlertDialog.Builder的setAdapter方法来确定列表项,就可以生成自定义列表项的对话框。

布局文件==》
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" > <EditText
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/> <Button
android:id="@+id/btnTest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="test" /> </LinearLayout> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" > <ImageView
android:id="@+id/header"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> <TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> </LinearLayout> 代码实现==》
package com.example.myalertdialog5; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.DialogInterface;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.SimpleAdapter; public class MainActivity extends Activity
{
private final int List_Dialog = 0x113;
private String[] Names = new String[] { "大鸟", "小鸟", "老鸟" };
private int[] ImageIds = new int[] { R.drawable.ss, R.drawable.ele, R.drawable.sw };
private EditText etTest; @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Button btn = (Button) this.findViewById(R.id.btnTest);
etTest = (EditText) this.findViewById(R.id.edit);
btn.setOnClickListener(new OnClickListener()
{
@SuppressWarnings("deprecation")
@Override
public void onClick(View v)
{
showDialog(List_Dialog);
}
});
} @Override
protected Dialog onCreateDialog(int id, Bundle args)
{
switch (id)
{
case List_Dialog:
Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ele);
builder.setTitle("单选列表对话框");
List<Map<String, Object>> map = new ArrayList<Map<String, Object>>();
for (int i = 0; i < Names.length; i++)
{
Map<String, Object> item = new HashMap<String, Object>();
item.put("header", ImageIds[i]);
item.put("birdsnames", Names[i]);
map.add(item);
}
SimpleAdapter adapter = new SimpleAdapter(this, map, R.layout.row, new String[] {
"birdsnames", "header" }, new int[] { R.id.name, R.id.header });
builder.setAdapter(adapter, new AlertDialog.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
etTest.setText("你选择了喜欢:" + Names[which]);
}
});
return builder.create();
}
return null;
} @Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

注意:开发者也可以完全控制对话框内容,AlertDialog.Builder提供了一个setView(View view)——该方法允许设置对话框显示的内容为View组件(此处的组件可以是一个布局容器)。

运行效果:

 

Activity以对话框方式显示

注意:需要设置AndroidMainfest.xml配置文件,如下:

    <activity
android:name="com.example.myalertdialog6.MainActivity"
android:label="Activity对话框方式显示"
android:theme="@android:style/Theme.Dialog" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

实例六:

布局文件==》
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" > <ImageView
android:id="@+id/header"
android:background="@drawable/eighteen"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> <Button
android:id="@+id/btnTest"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="关闭"/> </LinearLayout> AndroidMainfest.xml==>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myalertdialog6"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" > <!-- acitvity对话框样式设置 android:theme="@android:style/Theme.Dialog" -->
<activity
android:name="com.example.myalertdialog6.MainActivity"
android:label="Activity对话框方式显示"
android:theme="@android:style/Theme.Dialog" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest> 代码实现==》
package com.example.myalertdialog6; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainActivity extends Activity
{ @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Button btn = (Button) this.findViewById(R.id.btnTest);
btn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
finish();
}
});
} @Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

运行效果:

android学习笔记16——对话框的更多相关文章

  1. android学习笔记19——对话框(DatePickerDialog、TimePickerDialog)

    DatePickerDialog.TimePickerDialog ==> DatePickerDialog.TimePickerDialog功能.用法都比较简单,操作步骤: 1.通过new关键 ...

  2. android学习笔记17——对话框(PopupWindow)

    PopupWindow ==> PopupWindow可创建类似对话框的窗口,使用其创建对话框窗口的操作步骤: 1.调用PopupWindow构造器构造PopupWindow对象: 2.调用Po ...

  3. Android学习笔记进阶16之BitmapShader

    <1>简介 具体的看一下博文:Android学习笔记进阶15之Shader渲染 public   BitmapShader(Bitmap bitmap,Shader.TileMode ti ...

  4. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

  5. Pro Android学习笔记 ActionBar(1):Home图标区

     Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...

  6. 【转】 Pro Android学习笔记(七七):服务(2):Local Service

    目录(?)[-] Local service代码 调用Local ServiceLocal Service client代码 AndroidManifestxml定义Serviceacitivty的l ...

  7. 【转】 Pro Android学习笔记(五七):Preferences(1):ListPreference

    目录(?)[-] 例子1ListPreference小例子 定义一个preferences XML文件 继承PreferenceActivity 用户定制偏好的读取 第一次运行时设置缺省值 设置Cat ...

  8. 【转】 Pro Android学习笔记(五六):配置变化

    目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...

  9. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

随机推荐

  1. 三分钟了解Activity工作流

    一. 什么是工作流 以请假为例,现在大多数公司的请假流程是这样的 员工打电话(或网聊)向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请假录入电脑 采用工作 ...

  2. UVa 10624 - Super Number

    题目大意 给定两个数n和m,如果长度为m的数满足对于每个i(n<=i<=m),数字的前i位都能被i整除,那么这个数就是超级数,求出字典序最小的符合要求的超级数. 分析 直接暴力搜索 #in ...

  3. UI学习笔记---第十三天可视化设计 XIB, StoryBoard

    一.XIB Xib是一种苹果提供的快速构建界面的编程方式,主要是为了简化MVC中的V的构建 Xib提供可视化的编辑界面,能大大提升页面布局效率 Xib常用操作 为控件关联事件 为空间指定delegat ...

  4. 触摸精灵lua脚本实现微信群加好友功能

    --此脚本针对iPhone5/5s --目前只实现一个屏幕微信群好友的添加,如果想添加更多好友, --需要划屏操作,执行划屏操作时建议循环滑动 function main() --获取屏幕的分辨率 w ...

  5. 快速对字符转义,避免跨站攻击XSS

    XSS已经成为非常流行的网站攻击方式,为了安全起见,尽量避免用户的输入.可是有些情况下不仅不避免,反而要求鼓励输入,比如写博客.博客园开放性很高,可以运行手写的JS.之前比较著名的例子就是,凡是看到某 ...

  6. tools/build.c

    /* *  linux/tools/build.c * *  Copyright (C) 1991, 1992  Linus Torvalds */ /* * This file builds a d ...

  7. root密码

    安装完Ubuntu后忽然意识到没有设 置root密码,不知道密码自然就无法进入根用户下.到网上搜了一下,原来是这麽回事.Ubuntu的默认root密码是随机的,即每次开机都有一个新的 root密码.我 ...

  8. spark新能优化之序列化

    概叙: 在任何分布式系统中,序列化都是扮演着一个重要的角色的.如果使用的序列化技术,在执行序列化操作的时候很慢,或者是序列化后的数据还是很大,那么会让分布式应用程序的性能下降很多.所以,进行Spark ...

  9. Java中将16进制字符串转换成汉字

    技术交流群:233513714 /** * 将16进制字符串转换成汉字 * @param str * @return */ public static String deUnicode(String ...

  10. kuangbin_ShortPath K (POJ 3159)

    很简单的模板题 放在K那么后的位置的原因大概是 光看题意并不是很容易想到是用最短路解吧 奈何kuangbin分在了最短路专题 一发水过 #include <iostream> #inclu ...