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 修复版本.在这个版本中,当你创建工程时一项改变将会吸引你的眼球.工程创建登陆 ...
随机推荐
- pojo的序列化和反序列化
实例代码: package com.lky.pojo; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStrea ...
- [Falcor] Return the data from server
<!-- index.html --> <html> <head> <!-- Do _not_ rely on this URL in production. ...
- Android Studio 初体验
Google在I/O */
- Excel02-快速无误输入多个零
第一步:设置单元格格式-->小数位数为0,货币符号为¥ 第二步:在单元格输入数据:1**5回车即显示为¥100,000 **N 表示后面有N个零,会自动加入我们设置的货币符号¥ 这对我们在输入巨 ...
- Word03-文档中的截图显示不全
今天写文档时遇到个很蛋疼的问题,在doc文档中复制进去的截图总是显示不全,图片上半部分都被文字遮盖了,折腾半天,最后还是网上找到了答案. 解决方法如下: 将图片所在行的段落行距修改为其它值即可,原来为 ...
- linux nc命令
即NetCat简写,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本.因为它短小精悍(1.84版本也不过25k,旧版本或缩减版甚至更小).功能实用,被设计为一个简单.可靠的网络工具 ...
- 忘记 mysql5.5.24 数据库 root 密码
兹整理如下,供网友参考 第一步:关闭mysql服务 第二步:新建txt 写入如下内容 UPDATE mysql.user SET Password=PASSWORD('blog.const.net.c ...
- css3选择符使用个人理解。
元素选择符: 通配选择符:一般用* 星号表示 他会命中整体标签. 类型选择符:一般用者空格表示 他会命中标签自己的所有子元素. ID选择符: 一般用# 井号表示 他会命中以id为属性的标签 ...
- CSS Hack是什么意思
CSS hack由于不同的浏览器,比如Internet Explorer 6,Internet Explorer 7,Mozilla Firefox等,对CSS的解析认识不一样,因此会导致生成的页面效 ...
- 将GridView中的数据导出到Excel代码与注意事项
//gv:需要导出数据的GridView,filename:导出excel文件名 public void ExportToExcel(GridView gv, string filename) { s ...