Android 对话框简介
对话框(Dialog)是程序运行过程中弹出的窗口,Android中有好多种对话框,如警告对话框,进度对话框,列表对话框,单选对话框,日期选择对话框,时间选择对话框等;
下面用几个例子来演示一下各种对话框:
(1)在activity_main.xml中添加一个按钮:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.xiaozhang.dialog.MainActivity" >
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/button" />
</RelativeLayout>
(2)在strings.xml中加入:
<string name="button">对话框</string>

(3)各种对话框如下:


代码:
package com.xiaozhang.dialog;
import java.util.Calendar;
import android.app.Activity;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View.OnClickListener;
import android.widget.TimePicker;
import android.widget.Toast;
public class View extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new OnClickListener() {
@Override
public void onClick(android.view.View v) {
Calendar calendar = Calendar.getInstance();
TimePickerDialog.OnTimeSetListener timeListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int hourOfDay,
int minute) {
Toast toast = Toast.makeText(View.this, "时间:"
+ hourOfDay + ":" + minute, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER,
toast.getXOffset() / 2, toast.getYOffset() / 2);
toast.show();
}
};
TimePickerDialog dlg = new TimePickerDialog(View.this,
timeListener, calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE), true);
dlg.show();
}
});
}
}


代码如下:
package com.xiaozhang.dialog;
import java.util.Calendar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View.OnClickListener;
import android.widget.DatePicker;
import android.widget.Toast;
public class View extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new OnClickListener() {
@Override
public void onClick(android.view.View v) {
Calendar calendar = Calendar.getInstance();
DatePickerDialog.OnDateSetListener dateListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int year,
int month, int dayOfMonth) {
Toast toast = Toast.makeText(View.this, "日期:" + year
+ "年" + (month + 1) + "月" + dayOfMonth + "日",
Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER,
toast.getXOffset() / 2, toast.getYOffset() / 2);
toast.show();
}
};
DatePickerDialog dlg = new DatePickerDialog(View.this,
dateListener, calendar.get(Calendar.YEAR), calendar
.get(Calendar.MONTH), calendar
.get(Calendar.DAY_OF_MONTH));
dlg.show();
}
});
}
}

代码如下:
package com.xiaozhang.dialog;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
public class View extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new OnClickListener() {
@Override
public void onClick(android.view.View v) {
LayoutInflater inflater = getLayoutInflater();
android.view.View layout = inflater.inflate(R.layout.dialog,
(ViewGroup) findViewById(R.id.dialog));
new AlertDialog.Builder(View.this).setTitle("自定义对话框")
.setView(layout).setPositiveButton("确定", null)
.setNegativeButton("取消", null).show();
}
});
}
}
dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/icon"
android:layout_gravity="center"
/>
<TextView
android:id="@+id/textName1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/textName1"
android:textSize="25sp"
android:gravity="center"/>
<TextView
android:id="@+id/textName2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/textName2"
android:textSize="25sp"
android:gravity="center" />
</LinearLayout>

代码只需要修改onCreate方法中的内容即可:
new AlertDialog.Builder(View.this)
.setTitle("复选框")
.setMultiChoiceItems(
new String[] { "Item1", "Item2", "Item3" },
null, null).setPositiveButton("确定", null)
.setNegativeButton("取消", null).show();

new AlertDialog.Builder(View.this).setTitle("请输入")
.setIcon(android.R.drawable.ic_dialog_info)
.setView(new EditText(View.this))
.setPositiveButton("确定", null)
.setNegativeButton("取消", null).show();

代码如下:
new AlertDialog.Builder(View.this)
.setTitle("单选框")
.setIcon(android.R.drawable.ic_dialog_info)
.setSingleChoiceItems(
new String[] { "Item1", "Item2" }, 0,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
}
}).setNegativeButton("取消", null)
.setPositiveButton("确定", null).show();

new AlertDialog.Builder(View.this)
.setTitle("列表框")
.setItems(new String[] { "Item1", "Item2", "Item3","Item4" }, null)
.setNegativeButton("确定", null).show();



package com.xiaozhang.dialog;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;
public class MainActivity extends Activity {
private AlertDialog.Builder builder = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 实例化AlertDialog.Builder对象
builder = new AlertDialog.Builder(this);
findViewById(R.id.button).setOnClickListener(new ButtonListener());
}
class ButtonListener implements OnClickListener {
public void onClick(View v) {
builder.setTitle("警告对话框").setMessage("确定要删除该文件吗?");
// 设置确认按钮
builder.setPositiveButton("是",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
show("删除成功");
}
});
// 设置取消按钮
builder.setNegativeButton("否",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
show("取消删除");
}
});
// 创建对话框
AlertDialog alertDialog = builder.create();
// 显示对话框
alertDialog.show();
}
}
// 使用Toast来显示点击对话框之后的效果
public void show(String str) {
Toast toast = Toast.makeText(getApplicationContext(), str,
Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, toast.getXOffset() / 2,
toast.getYOffset() / 2);
toast.show();
}
}


package com.xiaozhang.dialog;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;
public class ProcessDialog extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showDialog(0);
}
});
}
@Override
protected Dialog onCreateDialog(int id) {
// 对进度对话框进行实例化
ProgressDialog dialog = new ProgressDialog(this);
dialog.setTitle("进度对话框");
dialog.setIndeterminate(true);
dialog.setMessage("程序正在Loading...");
dialog.setCancelable(true);
dialog.setButton(Dialog.BUTTON_POSITIVE, "确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
show("确定");
}
});
return dialog;
}
// 使用Toast来显示点击对话框之后的效果
public void show(String str) {
Toast toast = Toast.makeText(getApplicationContext(), str,
Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, toast.getXOffset() / 2,
toast.getYOffset() / 2);
toast.show();
}
}
不过showDialog()方法已经不建议使用了;
google推荐的代替方法:
package com.xiaozhang.dialog;
import android.app.Activity;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;
public class ProcessDialog extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MyDialogFragment dialog = new MyDialogFragment();
dialog.show(getFragmentManager(), "EditNameDialog");
}
});
}
class MyDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// 对进度对话框进行实例化
ProgressDialog dialog = new ProgressDialog(ProcessDialog.this);
dialog.setTitle("进度对话框");
dialog.setIndeterminate(true);
dialog.setMessage("程序正在Loading...");
dialog.setCancelable(true);
dialog.setButton(Dialog.BUTTON_POSITIVE, "确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
show("确定");
}
});
return dialog;
}
// 使用Toast来显示点击对话框之后的效果
public void show(String str) {
Toast toast = Toast.makeText(getApplicationContext(), str,
Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, toast.getXOffset() / 2,
toast.getYOffset() / 2);
toast.show();
}
}
}



package com.xiaozhang.dialog;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;
public class NaturalDialog extends Activity {
private AlertDialog.Builder builder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
builder = new AlertDialog.Builder(this);
findViewById(R.id.button).setOnClickListener(new ButtonListener());
}
class ButtonListener implements OnClickListener {
@Override
public void onClick(View v) {
builder.setIcon(R.drawable.icon).setTitle("普通对话框");
builder.setMessage("你擅长Android吗?");
builder.setPositiveButton("擅长",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
show("Android:擅长");
}
});
builder.setNegativeButton("不擅长",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
show("Android:不擅长");
}
});
builder.setNeutralButton("一般",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
show("Android:一般");
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
}
// 使用Toast来显示点击对话框之后的效果
public void show(String str) {
Toast toast = Toast.makeText(getApplicationContext(), str,
Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, toast.getXOffset() / 2,
toast.getYOffset() / 2);
toast.show();
}
}
下面做个例子:
这个例子转载自:http://www.tuicool.com/articles/ZvyuAfU
当点击确定时,转移到登陆对话框,当输入用户名和密码后,转移到登陆进度对话框,然后等待3秒,跳转到另一个页面;





代码如下:
DialogTest.java
package com.xiaozhang.dialog;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
public class DialogTest extends Activity {
/** Called when the activity is first created. */
ProgressDialog mydialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AlertDialog.Builder builder = new AlertDialog.Builder(DialogTest.this);
builder.setTitle("登录提示").setMessage("这里需要登录");
builder.setPositiveButton("确定", // 设置确定按钮
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 点击确定转向登录对话框
LayoutInflater factory = LayoutInflater
.from(DialogTest.this);
// 得到自定义对话框
final View DialogView = factory.inflate(
R.layout.dialog, null);
// 创建对话框
AlertDialog.Builder builder = new AlertDialog.Builder(
DialogTest.this);
builder.setTitle("登录框").setView(DialogView);
builder.setPositiveButton("确定",
new DialogInterface.OnClickListener() {// 设置监听事件
@Override
public void onClick(DialogInterface dialog,
int which) {
// 输入完成后点击“确定”开始登录
mydialog = ProgressDialog.show(
DialogTest.this, "请稍等...",
"正在登录...", true);
new Thread() {
public void run() {
try {
sleep(3000);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 登录结束,取消mydialog对话框
Intent intent = new Intent();
intent.setClass(
DialogTest.this,
MainActivity.class);
startActivity(intent);
}
}
}.start();
}
});
builder.setNegativeButton("取消",// 设置取消按钮
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// 点击取消后退出程序
DialogTest.this.finish();
}
});
builder.create().show();
}
});
builder.setNeutralButton("退出", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 点击退出后退出程序
DialogTest.this.finish();
}
});
builder.create().show();
}
}
dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:gravity="start"
android:text="用户名"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/username2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:gravity="fill_horizontal"
android:inputType="text"
android:scrollHorizontally="true"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:gravity="start"
android:text="密码"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/password2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:gravity="fill_horizontal"
android:inputType="textPassword"
android:scrollHorizontally="true"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
MainActivity.java
package com.xiaozhang.dialog;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="跳转到这里" />
</LinearLayout>
还要在AndroidManifest.xml中注册这个Activity;
<activity
android:name=".DialogTest"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
</activity>
Android 对话框简介的更多相关文章
- 【Android应用开发】Android Studio 简介 (Android Studio Overview)
一. Intelij IDEA 环境简介 Android Studio 来源 : Android Studio 是 Intelij IDEA 的免费版本 + Android SDK 集成的; -- I ...
- Android对话框AlertDialog-android学习之旅(四十二)
对话框简介 android提供了丰富的对话框支持,支持四种如下的对话框. AlertDialog简介 介绍上面六个方法的代码示例 setMessage() <?xml version=" ...
- Android Framework 简介
Android Framework 简介 简介 之前的研究太偏向应用层功能实现了,很多原理不了解没有详记,结果被很多公司技术人员鄙视了,为了减少自己的短板,重新复习了一遍C++.java.Androi ...
- Android 对话框(Dialog)大全 建立你自己的对话框
Android 对话框(Dialog)大全 建立你自己的对话框 原文地址: http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html A ...
- Android Studio 简介及导入 jar 包和第三方开源库方[转]
原文:http://blog.sina.com.cn/s/blog_693301190102v6au.html Android Studio 简介 几天前的晚上突然又想使用 Android Studi ...
- Android对话框
这周过的实在是艰辛,自打这周二起我的本本就开始闹"罢工",最后还是重装系统了事. . . 只是可怜了我的那些被格了的软件(悲伤辣么大)! 往事不要再提,人生几度风雨... 简 ...
- "浅谈Android"第一篇:Android系统简介
近来,看了一本书,名字叫做<第一行代码>,是CSDN一名博主写的,一本Android入门级的书,比较适合新手.看了书之后,有感而发,想来进行Android开发已经有一年多了,但欠缺系统化的 ...
- 【译】Android系统简介—— Activity
续上一篇,继续介绍Android系统.上一篇: [译]Android系统简介 本文主要介绍构建Android应用的一些主要概念: Activity Activity是应用程序中一个单独的有UI的页面( ...
- 被遗忘的Android mipmaps简介
被遗忘的 Android mipmaps 简介 [导读]已经发布的 Android Studio1.1 版本是一个 bug 修复版本.在这个版本中,当你创建工程时一项改变将会吸引你的眼球.工程创建登陆 ...
随机推荐
- [LeetCode] 55. Jump Game 解题思路
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...
- javaweb笔记6多个响应头以及 HttpServletResponse对象
1 常见的响应头 Location: http://www.it315.org/index.jsp 重定向的地址.配合302的状态码一起使用,实现重定向效果. Content-Type: te ...
- ORACLE_CLASS_ENDING
[JSU]LJDragon's Oracle course notes In the first semester, junior year Oracle考前复习 试题结构分析: 1.选择题2x10, ...
- DevExpress之时间控件
dateEdit和timeEdit 基本属性 DisplayFormat.FormatString-------失去焦点是控件显示的格式,timeEdit用不上 EditMask----------- ...
- 使用带Arduino IDE & WIZ820io的ATmega1284P
使用带Arduino IDE & WIZ820io的ATmega1284P 2013/07/04 | Filed under: IO模块 and tagged with: arduin ...
- swift 创建tableView 并实现协议
import UIKit class ViewController2: UIViewController,UITableViewDelegate,UITableViewDataSource{ ...
- QML设计登陆界面
QML设计登陆界面 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:Qt5.2 说明: 用QML设计一个应用的登陆界面 ...
- Spring MVC 注解[转]
[学习笔记]基于注解的spring3.0.x MVC学习笔记(九) 摘要: 本章节,仅为@SessionAttributes的功能扩展介绍介绍,结合@requestparam注解进行简易无数据库分页. ...
- 小学生之KTV项目文档(bdqn)
第一步:创建数据库连接方法和打开方法和关闭方法! 1 public class DBHelper 2 { 3 private string str = "server=.;database= ...
- Grand Central Dispatch(GCD)详解(转)
概述 GCD是苹果异步执行任务技术,将应用程序中的线程管理的代码在系统级中实现.开发者只需要定义想要执行的任务并追加到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行任务.由于 ...