转自:Android之 对话框 的使用

一个对话框通常是在当前Activity之前显示的一个小的窗口。下面的Activity失去了焦点,上面的对话框接收用户的交互信息。对话框通常用来作为提示以及直接与程序运行过程相关的短暂停留界面。

AlertDialog

描述:一个可以处理0个、1个、2个或3个按钮,和/或一组包含复选框或单选按钮等可以选择的项。AlertDialog足够胜任创建和用户交互的大部分对话框,并且它也是被推荐的对话框类型。具体如下:

创建一个AlertDialog

一个AlertDialog对话框继承与Dialog类。你应该使用如下特性来装点你的对话框:

l         一个标题

l         一条信息

l         1、2、或3个按钮

l         一组可供选择的项(复选框或者单选按钮)

为了创建一个AlertDialog,可以使用AlertDialog.Builder子类。使用

AlertDialog.Builder(Context)得到一个对话框构造器,然后使用该类的共有方法来定义AlertDialog对话框的所有属性。在你使用对话框构造器设置完属性之后,调用create()方法即可得到一个AlertDialog的对象。

添加按钮

为了创建一个有着一个个按钮紧挨着的AlertDialog对话框,就像下图所示的那样,可以使用set…Button()方法:

主要代码如下:

btn1 = (Button) findViewById(R.id.dlg_with_btns);

// 点击按钮后创建AlertDialog对话框

btn1.setOnClickListener(new OnClickListener() {

public void onClick(View view) {

// 先创建对话框构造器

AlertDialog.Builder builder =

new AlertDialog.Builder(MainActivity.this);

// 创建完后设置对话框的属性

// 标题

builder.setMessage("Welcome to my blog on CSDN?")

// 不可取消(即返回键不能取消此对话框)

.setCancelable(false)

// 设置第一个按钮的标签及其事件监听器

.setPositiveButton("Good",

new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog,

int id) {

// ..

}

})

// 设置第二个按钮的标签及其事件监听器

.setNegativeButton("Need improving",

new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog,

int id) {

// ..

}

});

// 用对话框构造器创建对话框

AlertDialog alert = builder.create();

// 显示对话框

alert.show();

}

});

首先,调用setMessage(CharSequence)来设置对话框的标题。然后,开始方法链并用setCancelable(boolean)设置对话框不能被取消(用户不能使用返回键来关闭对话框)。为每个按钮,使用set…Button()方法中的一个,例如setPositiveButton(),它需要传入按钮的标签,以及当用户点击该按钮后预设动作的DialogInterface.OnClickListener事件监听器。(用SetNeutralButton()来设置中间按钮)

注意:每种类型的按钮你仅仅可以为AlertDialog添加一个。也就是说,你不能拥有多于一个的”positive”按钮。这样就限制了可能拥有的最多按钮的情况:positive、neutral、negative。这些名字技术上来讲和你按钮的实际功能毫无关系,但应该可以帮助你跟踪每个按钮做了什么事。

添加一个列表

像下图一样,为了添加一系列可选择的列表到AlertDialog,可以使用setItems()方法。

具体代码如下:

btn2 = (Button) findViewById(R.id.dlg_with_list);

btn2.setOnClickListener(new OnClickListener() {

public void onClick(View view) {

final CharSequence[] items =

{"Engineer", "Student", "IT-_-!"};

AlertDialog.Builder builder =

new AlertDialog.Builder(MainActivity.this);

builder.setTitle("What's your job?")

.setItems(items, new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int item) {

Toast.makeText(getApplicationContext(), items[item],

Toast.LENGTH_SHORT).show();

}

});

AlertDialog alert = builder.create();

alert.show();

}

});

首先,用setTitle(CharSequence)方法设置对话框的标题。然后,调用setItems()来添加一系列可选择项,这个方法接收可选项的显示内容数组以及一个定义当用户选中一个项目时所进行的动作的DialogInterface.OnClickListener事件监听器。

添加复选框和单选按钮

为了在对话框内部创建一系列多项项目(复选框)或者单选项目(单选框),可以分别使用setMultiChoiceItems()和setSingleChoiceItems()方法。假如你在onCreateDialog()回掉方法中创建其中的一种可选项目,Android系统会为你管理这一组可选项目的状态。只要这个Activity是活动的,对话框就会记得这些可选项目之前的状态,但当用户离开此Activity时,之前的选择状态就会丢失。

具体代码如下:

btn3.setOnClickListener(new OnClickListener() {

public void onClick(View view) {

final CharSequence[] items =

{"NanJing", "ShangHai", "YanChen", "Other.."};

AlertDialog.Builder builder =

new AlertDialog.Builder(MainActivity.this);

builder.setTitle("Where do you live?");

builder.setSingleChoiceItems(items, -1,

new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int item) {

Toast.makeText(getApplicationContext(), items[item],

Toast.LENGTH_SHORT).show();

}

});

AlertDialog alert = builder.create();

alert.show();

}

});

提示:为了在用户离开或者暂停Activity时保存选择状态,你必须在Activity的生命周期中保存或恢复设置。为了永久的保存选择状态,你需要使用一种数据存储技术来保存设置。

创建一个自定义对话框

假如你想拥有一个自定义的对话框,你可以为对话框创建你自己的布局。在你定义好布局之后,可将根类View的对象或者布局资源ID传给setContentView(View)。

自定义对话框如下所示:

例如,为了创建如下形式的对话框,大致需要的步骤为:

1、创建对话框布局文件,例如在layout下创建custom_dialog.xml文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/layout_root"

android:orientation="horizontal"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:padding="10dip">

<ImageView android:id="@+id/image"

android:layout_width="wrap_content"

android:layout_height="fill_parent"

android:layout_marginRight="10dip"/>

<TextView android:id="@+id/text"

android:layout_width="wrap_content"

android:layout_height="fill_parent"

android:textColor="#FFFFFF"/>

</LinearLayout>

这个XML布局文件在LinearLayout(线性布局中)定义了一个ImageView和TextView。

2、将以上布局文件设置为对话框的布局,并且定义ImageView和TextView的内容元素:

btn4 = (Button) findViewById(R.id.dlg_customized);

btn4.setOnClickListener(new OnClickListener() {

public void onClick(View view) {

Dialog dialog = new Dialog(MainActivity.this);

dialog.setContentView(R.layout.custom_dialog);

dialog.setTitle("Custom Dialog");

TextView text = (TextView)

dialog.findViewById(R.id.text);

text.setText("Hello, this is a custom dialog!");

ImageView image = (ImageView)

dialog.findViewById(R.id.image);

image.setImageResource(R.drawable.icon);

dialog.show();

}

});

在你初始化对话框之后,使用setContentView(int)来设置对话框的布局为自定义的布局,需要传入的参数为布局文件的ID。既然对话框已经定义了一个布局,你可以使用findViewById(int)来找到组件,并且可以更改它们的显示内容。

需要注意的地方:

1)最下面在对话框布局文件上为了找到image及text组件时,是使用的

dialog.findViewById,不然会程序会出现异常而退出!

2)最后不要忘了dialog.show();不然什么都看不到。

小结:本篇简要地介绍了对话框的使用,其中,一般比较常用的就是第一种对话框,简洁明了,最后一种对话框配合复杂的布局,要是能够用好的话,可以实现很不错的效果。

Android基础(13)——对话框 的使用的更多相关文章

  1. 基础4 Android基础

    基础4 Android基础 1. Activity与Fragment的生命周期. Activity生命周期 打开应用 onCreate()->onStart()->onResume 按BA ...

  2. Android基础总结(6)——内容提供器

    前面学习的数据持久化技术包括文件存储.SharedPreferences存储以及数据库存储技术保存的数据都只能被当前应用程序所访问.虽然文件存储和SharedPreferences存储中提供了MODE ...

  3. 【Xamarin开发 Android 系列 4】 Android 基础知识

    原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...

  4. Android基础-系统架构分析,环境搭建,下载Android Studio,AndroidDevTools,Git使用教程,Github入门,界面设计介绍

    系统架构分析 Android体系结构 安卓结构有四大层,五个部分,Android分四层为: 应用层(Applications),应用框架层(Application Framework),系统运行层(L ...

  5. android开发学习---linux下开发环境的搭建&& android基础知识介绍

    一.配置所需开发环境 1.基本环境配置 JDK 5或以上版本(仅有JRE不够) (http://www.oracle.com/technetwork/java/javase/downloads/ind ...

  6. Android逆向系列文章— Android基础逆向(6)

    本文作者:HAI_ 0×00 前言 不知所以然,请看 Android逆向-Android基础逆向(1) Android逆向-Android基础逆向(2) Android逆向-Android基础逆向(2 ...

  7. Android基础新手教程——4.1.2 Activity初窥门径

    Android基础新手教程--4.1.2 Activity初窥门径 标签(空格分隔): Android基础新手教程 本节引言: 上一节中我们对Activity一些主要的概念进行了了解,什么是Activ ...

  8. Android基础新手教程——4.1.1 Activity初学乍练

    Android基础新手教程--4.1.1 Activity初学乍练 标签(空格分隔): Android基础新手教程 本节引言: 本节開始解说Android的四大组件之中的一个的Activity(活动) ...

  9. Android基础新手教程——4.3.2 BroadcastReceiver庖丁解牛

    Android基础新手教程--4.3.2 BroadcastReceiver庖丁解牛 标签(空格分隔): Android基础新手教程 本节引言: 上节我们对BroadcastReceiver已经有了一 ...

  10. Android基础——项目的文件结构(二)

    Android基础--项目的文件结构(二) AndroidManifest.xml文件分析 [注]此项目文件结构仅限于Android Studio下的Android项目!!! 在一个Android项目 ...

随机推荐

  1. Windows 10简体中文最新预览版Build 9926

    Windows 10 消费者预览版全新特性: • 全新的开始菜单Win 10的开始菜单产生了较大改变,磁贴界面在原有磁贴概念的基础上进行了大幅度的调整,新的磁贴界面开始支持纵向滚动,并可以利用开始按钮 ...

  2. jQuery 的原型关系图,整体把握jQuery

            若干个月前,在博客园中看到一篇文章,内容很简单,就是一幅图,展示的是 jQuery 中各对象之间的关系,当时就觉得,这就是我想要的最直观的总结 jQuery 的方式.在那篇文章中,也有 ...

  3. Poisson Distribution——泊松分布

    老师留个小作业,用EXCEL做不同lambda(np)的泊松分布图,这里分别用EXCEL,Python,MATLAB和R简单画一下. 1. EXCEL 运用EXCEL统计学公式,POISSON,算出各 ...

  4. Flask生成SECRET_KEY(密钥)的一种简单方法

    SECRET_KEY是Flask中比较重要的一个配置值.本文介绍一种比较简单的生成SECRET_KEY的方法. Session, Cookies以及一些第三方扩展都会用到SECRET_KEY值,这是一 ...

  5. addslashes() 函数和stripslashes()函数

    addslashes() 函数 定义和用法 addslashes() 函数在指定的预定义字符前添加反斜杠. 这些预定义字符是: 单引号 (') 双引号 (") 反斜杠 (\) NULL 语法 ...

  6. 黑马程序员:Java编程_反射技术

    =========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== Java类用于描述一类事物的共性,该类事物有什么属性,没有什么属性,至于这个属性 ...

  7. java项目部署在服务器环境配置以及命令的编写

    在往项目上部署java项目(即打成的jar包),要为相应的项目配置环境变量,即项目运行所需要的jar或其他第三方的jar包,java -cp derivativeAccording.jar:lib/c ...

  8. oracle 查询数据库表空间大小和剩余空间

    dba_data_files:数据库数据文件信息表.可以统计表空间大小(总空间大小). dba_free_space:可以统计剩余表空间大小. 增加表空间即向表空间增加数据文件,表空间大小就是数据文件 ...

  9. 11g RAC集群启动关闭、各种资源检查、配置信息查看汇总。

    简要:一:集群的启动与关闭 1. rac集群的手动启动[root@node1 bin]# ./crsctl start cluster -all2. 查看rac集群的状态[root@node1 bin ...

  10. 【Unity3D基础教程】给初学者看的Unity教程(零):如何学习Unity3D

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点推荐.谢谢! Unity3D有什么优势 Unity3D是一个跨 ...