本章内容
第1节 Toast提示框
第2节 AlertDialog对话框
第3节 特色对话框
第4节 自定义对话框
本章目标
熟练掌握Toast的用法。熟练掌握Dialog的用法。掌握几种常用的特色对话框的用法。掌握自定义对话框的方法。掌握Notification的用法。
Toast是一种浮于屏幕最上层,用于显示消息的窗体,u主要用于显示各种动作的提示信息,比如:
Ø正在编写的邮件自动保存到了草稿箱
Ø删除某条通讯了成功了
uToast窗体只是占据一部分的屏幕窗口
u当前的Activity依然保持存在并能与用户交互
uToast在显示一段时间超时后会自动关闭
构建Toast消息
u1、通过Toast.makeText()方法创建一个Toast对象
Context context = getApplicationContext(); CharSequence text = "Hello toast!"; int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, text, duration);
Øduration参数表示Toast显示的超时时间设定,可以取值如下:
lToast.LENGTH_SHORT短时间显示(大约2秒)
lToast.LENGTH_LONG长时间显示(大约3.5秒)
u2、通过Toast.show()方法显示Toast窗体
u
调整Toast的显示位置
u默认情况下,Toast显示在屏幕底部,水平居中的位置
u通过Toast.setGravity()方法可以修改显示位置,支持三个参数
Ø第一个参数gravity:接收一个Gravity常量,可以是常量的组合
Ø第二个参数是x方向的偏移量
Ø第三个参数是y方向的偏移量
toast .setGravity(Gravity.TOP|Gravity.LEFT, 20, 30);
Toast的外观除了默认情况外,也可以进行定制
u1、为Toast中显示的内容定制一个视图布局(toast_layout.xml)
<LinearLayout ……>
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF"
</LinearLayout>
u2、采用动态加载的办法在程序中为Toast使用定制布局
LayoutInflater li = getLayoutInflater();
View layout = li.inflate(R.layout.toast_layout_root, null);
TextView tv = (TextView)layout.findViewById(R.id.text);
tv.setText("custom toast");
Toast t = new Toast(getApplicationContext());
t.setGravity(Gravity.CENTER, 0, 0);
t.setDuration(Toast.LENGTH_SHORT);
t.setView(layout);
t.show();
Dialog是一个让用户做一个决定或者输入一些信息的窗口,对话框通常不充满屏幕,与Toast不同,对话框不会自动关闭,对话框出现时,当前Activity的界面继续显示但不能进行交互,对话框不是一个视图,基类是Dialog继承自Object
对话框的创建方法有多种
uAndroid系统提供了很多对话框的类用于创建各种对话框
Øandroid.app.AlertDialog
Øandroid.app.DatePickerDialog
Øandroid.app.TimePickerDialog
Øandroid.app.ProgressDialog
u自主定义对话框内容
u通过AlertDialog创建对话框是最常用的办法
AlertDialog是Dialog的直接子类
u包含一个标题
u包含一个文本消息
u可以管理0~3个按钮
u可以包含单选列表和多选列表
u不能直接创建对象,需要使用AlertDialog.Builder
u
u
使用AlertDialog
u创建AlertDialog对象
AlertDialog.Builder builder = new AlertDialog.Builder(this); AlertDialog alert = builder.create();
u使用Builder对象的setTitle()方法设置标题内容
builder.setTitle(“信息提示”);
u使用Builder对象的setMessage()方法设置消息内容
builder.setMessage (“信息提示”);
使用AlertDialog,添加按钮
builder.setPositiveButton("Yes", new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
MyActivity.this.finish();
}
})
.setNegativeButton("No", new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
}
);
简单列表对话框相当于将ListView组件放在对话框上
u通过AlertDialog.Builder中的setItems()设置内容和事件监听
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("请选择你最喜欢的运动");
builder.setItems(items, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
show.setText("你选中了《" + items[which] + "》");
}
});
builder.create().show();
简单列表对话框相当于将ListView组件放在对话框上,运行后的效果图
单选列表对话框用于显示单选列表
u通过Builder中的setSingleChoiceItems()设置内容和事件监听
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setSingleChoiceItems(items, 1, new OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
show.setText("你选中了《" + items[which] + "》");
}
});
builder.setTitle("请选择要使用的情景模式");
builder.create().show();
单选列表对话框用于显示单选列表,运行后的效果图
复选列表对话框用于显示复选项列表,通过Builder中的setMultiChoiceItems()设置内容和事件监听
final boolean[] checkedItems= new boolean[] { false, true, false,true, false };
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("请选择您喜爱的游戏");
builder.setMultiChoiceItems(items, checkedItems,
new OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
checkedItems[which]=isChecked; //改变被操作列表项的状态 }
});
builder.create().show();
复选列表对话框用于显示复选项列表
u运行后的效果图
自定义列表对话框用于显示自定义列表,通过Builder中的setAdapter()设置列表项内容
final String[] items = new String[] { "迈巴赫","布加迪","法拉利","保时捷"};
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle("自定义列表项对话框")
.setIcon(R.drawable.tools)
.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1
, items), new OnClickListener() { public void onClick(DialogInterface dialog, int which) {
show.setText("你选中了《" + items[which] + "》");
}
});
builder.create().show();
自定义列表对话框用于显示自定义列表,运行后的效果图
自定义对话框的实现思路
u所谓自定义就是要摆脱对话框的固有模式,显示自定义的设计
u首先需要做的是通过布局的方式将自定义内容的布局设计出来
Ø一般会在res/layout下通过xml文件存放自定义的设计
u然后通过对话框提供的能力将自定义的布局显示在对话框中
uAlertDialog类提供了使用自定义内容的基础
通过AlertDialog类实现自定义对话框
uAlertDialog是Dialog的子类,完全具备了Dialog的特性
u对于Dialog来讲,如果没有设置Title,Title位置依然空白存在
ØAlertDialog可以解决这个问题
u使用AlertDialog加载自定义布局的示例如下:
LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.custom_dlg, null); AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setView(layout); AlertDialog alertDialog = builder.create(); alertDialog.show();
自定义对话框,示例运行效果
对话框风格的窗口
这种对话枢本质上依然是窗口,只是把显示窗口的Activity的风格设为对话枢风格即可,需要先增加Activity,在清单文件中进行设置
<activity android:name="com.aaa.ui.DialogTheme" android:theme="@android:style/Theme.Dialog" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
自定义对话框
u示例运行效果
浙公网安备 33010602011771号