Android中dialog的使用
来源:互联网 发布:left软件安卓版 编辑:程序博客网 时间:2024/05/21 21:44
在android 中提到dialog相信大家都不陌生,开发中经常用到的一个类,个人认为在android开发中dialog和popupwindow使用上有很多共性,后者的操作性应该更强些。。。
Dialog类,是一切对话框的基类,需要注意的是,Dialog类虽然可以在界面上显示,但是并非继承于View类,而是直接从java.lang.Object开始构造出的。类似于Activity,Dialog也是有生命周期的,它的生命周期由Activity来维护。Activity负责生成、保存、恢复它。在生命周期的每一个阶段都有一些回调函数供系统反向调用。
ShowDialog(int id):负责显示标示为id的Dialog,这个函数如果调用后,系统将反向调用Dialog的回调函数onCreateDialog(int id);
dismissDialog(int id):使标示为id的Dialog在界面当中消。
AlertDialog是Dialog的一个直接子类,一个AlertDialog可以有两个Button或者3个Button,可以对一个AlertDialog设置title、message。不能直接通过AlertDialog的构造函数来生成一个AlertDialog,一般生成的时候都是通过它的的一个内部静态类AlertDialog.Builder来构造的。
在开发中,经常会在界面上弹出一些对话框,以达到与用户良好的交互及体验感。比如询问用户或者让用户选择,这些功能我们叫它Android Dialog对话框,从大体上来说,
可归为7类:
1.最普通的用法就弹出一个基本的提示对话框,通常以起到提示的作用
通过图片可以看到,在这种情况下的对话框可看成被分为上下两个部分,上部分是对话框的title部分,下面的message部分,其实是细分还有其他部分
①图片区 ②标题区 ③内容区④按钮区
- AlertDialog.Builder builder = new AlertDialog.Builder(this)
- .setIcon(R.mipmap.ic_launcher) //设置对话框的图标,可不写
- .setTitle("对话框") //设置对话框的标题,可不写
- .setMessage("消息体") //设置对话框的消息体,可不写 ,如果都不写,这对话框只会显示一个暗灰色的效果
- .setCancelable(false); //设置点击对话框以外区域及返回键是否消失
- builder.create().show();
如果只是设置点击对话框以外区域不消失,则可通过设置alertdialog的setCanceledOnTouchOutside(false);
- AlertDialog.Builder builder = new AlertDialog.Builder(this)
- .setIcon(R.mipmap.ic_launcher)
- .setTitle("对话框")
- .setMessage("消息体")
- .setNegativeButton("确定", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //点击确定操作
- }
- })
- .setPositiveButton("取消", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //点击取消操作
- }
- })
- .setCancelable(false);
- builder.create().show();
2.改变了对话框的图表,添加了三个按钮
- AlertDialog.Builder builder = new AlertDialog.Builder(this)
- .setIcon(R.mipmap.ic_launcher)
- .setTitle("对话框")
- .setMessage("消息体")
- .setNegativeButton("喜欢", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //点击确定操作
- }
- })
- .setPositiveButton("不喜欢", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //点击取消操作
- }
- })
- .setNeutralButton("一般", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //点击一般操作
- }
- })
- .setCancelable(false);
- builder.create().show();
3.信息内容是一个简单的View类型
4.信息内容是单选框
- AlertDialog.Builder builder = new AlertDialog.Builder(this)
- .setIcon(R.mipmap.ic_launcher)
- .setTitle("对话框")
- .setMessage("消息体")
- .setView(new EditText(this))
- .setNegativeButton("确定", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //点击确定操作
- }
- })
- .setPositiveButton("取消", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //点击取消操作
- }
- })
- .setCancelable(false);
- builder.create().show();
5.信息内容是多选框
- AlertDialog.Builder builder = new AlertDialog.Builder(this)
- .setIcon(R.mipmap.ic_launcher)
- .setTitle("单选框")
- .setSingleChoiceItems(new String[]{"itme1", "item2"}, 0, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //单击item操作
- }
- })
- .setNegativeButton("确定", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //点击确定操作
- }
- })
- .setPositiveButton("取消", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //点击取消操作
- }
- })
- .setCancelable(false);
- builder.create().show();
这里说下复选框的setMultiChoiceItems的方法,对于此方法的第二个参数是设置默认状态下选中的item,如例子中第二个item给选中
- AlertDialog.Builder builder = new AlertDialog.Builder(this)
- .setIcon(R.mipmap.ic_launcher)
- .setTitle("单选框")
- .setMultiChoiceItems(new String[]{"item1", "item2", "item3"}, new boolean[]{false, true, false}, new DialogInterface.OnMultiChoiceClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which, boolean isChecked) {
- //单击item操作
- }
- })
- .setNegativeButton("确定", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //点击确定操作
- }
- })
- .setPositiveButton("取消", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //点击取消操作
- }
- })
- .setCancelable(false);
- builder.create().show();
6.信息内容是一组简单列表项
列表项的对话框相对前几项就简单些,单击item后对话框就消失了
- AlertDialog.Builder builder = new AlertDialog.Builder(this)
- .setIcon(R.mipmap.ic_launcher)
- .setTitle("列表项")
- .setItems(new String[]{"item1", "item2"}, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //单击item操作
- }
- });
- builder.create().show();
7.信息内容是一个自定义的布局
本项跟第3项就很相似了,只是转换了布局而已,使用的是自定义的view
布局文件
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal" android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <TextView
- android:text="输入框:"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- <EditText
- android:layout_weight="1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- </LinearLayout>
- View view = getLayoutInflater().inflate(R.layout.dialog_view, null);
- AlertDialog.Builder builder = new AlertDialog.Builder(this)
- .setIcon(R.mipmap.ic_launcher)
- .setTitle("自定义view")
- .setView(view)
- .setPositiveButton("确定", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //单击确定操作
- }
- })
- .setNegativeButton("取消", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //单机取消操作
- }
- });
- builder.create().show();
以上只是基础使用,默认弹出的提示框位置固定了,如果想修改
- AlertDialog alertDialog = builder.create();
- alertDialog.setCanceledOnTouchOutside(false); //设置点击其他地方不让其消失
- Window mWindow = alertDialog.getWindow();
- WindowManager.LayoutParams lp = mWindow.getAttributes();
- // 透明度的范围为:0.0f-1.0f;0.0f表示完全透明,1.0f表示完全不透明(系统默认的就是这个)。
- lp.alpha = 0.35f;
- //设置对话框在屏幕的底部显示,当然还有上下左右,任意位置
- //mWindow.setGravity(Gravity.LEFT);
- // mWindow.setGravity(Gravity.BOTTOM);
- /*
- *
- * 这里是设置偏移量,这里的x,y并不是相对于屏幕的绝对坐标,而是相对于对话框在中心位置(默认的对话框一般显示在屏幕的中心)而言的
- * */
- lp.x = -20;// 设置水平偏移量
- lp.y = 300;// 设置竖直偏移量
- // 设置Window的属性
- mWindow.setAttributes(lp);
对于取消提示框可用dismiss或者cancel,难么两者的区别呢?
查看源码会发现cancel内部调用了dismiss...
警告对话框 AlertDialog: 一个可以有0到3个按钮, 一个单选框或复选框的列表的对话框. 警告对话框可以创建大多数的交互界面, 是推荐的类型.
进度对话框 ProgressDialog: 显示一个进度环或者一个进度条. 由于它是AlertDialog的扩展, 所以它也支持按钮.
日期选择对话框 DatePickerDialog: 让用户选择一个日期.
时间选择对话框 TimePickerDialog: 让用户选择一个时间.
如果你希望自定义你的对话框, 可以扩展Dialog类.
使用过程中还有完全自定义的dialog
下面我提供一个自定义的 边框圆形
Layout文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/register_dialog_bg"> <TextView android:layout_width="match_parent" android:layout_height="40dp" android:gravity="center" android:text="提示" android:textColor="@android:color/black" android:textSize="17sp"/> <TextView android:layout_width="match_parent" android:layout_height="40dp" android:layout_marginTop="5dp" android:gravity="center" android:text="测试中" android:textColor="@android:color/black" android:textSize="15sp"/> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#d0d0d0" android:layout_marginTop="5dp"/> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal"> <TextView android:id="@+id/tv_cancel" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:text="取消" android:textColor="@android:color/black" android:textSize="15sp" android:gravity="center"/> <View android:layout_width="1dp" android:layout_height="match_parent" android:background="#d0d0d0"/> <TextView android:id="@+id/tv_confirm" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:text="确定" android:textColor="@android:color/black" android:textSize="15sp" android:gravity="center"/> </LinearLayout></LinearLayout>shape文件
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#ffffffff" /> <!--<stroke android:width="5dp" android:color="@android:color/black"/>--> <corners android:radius="20dp" /> <padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp" /></shape>style文件
代码
- <style name="Dialog">
- <item name="android:windowBackground">@android:color/transparent</item>
- <item name="android:windowNoTitle">true</item>
- <item name="android:windowFrame">@null</item>
- <item name="android:windowIsFloating">true</item>
- <item name="android:windowContentOverlay">@null</item>
- <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
- <item name="android:windowIsTranslucent">true</item>
- <item name="android:backgroundDimEnabled">true</item>
- </style>
final Dialog dialog = new Dialog(this, R.style.Dialog);dialog.setCancelable(false);View view = LayoutInflater.from(this).inflate(R.layout.dialog, null);dialog.setContentView(view);TextView tvCancel = (TextView) view.findViewById(R.id.tv_cancel);TextView tvConfirm = (TextView) view.findViewById(R.id.tv_confirm);tvCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.cancel(); }});tvConfirm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); }});dialog.show();对于以上详细讲解下
<item name="android:windowFrame">@null</item>//Dialog的windowFrame框为无
<item name="android:windowIsFloating">true</item>//是否浮现在activity之上
<item name="android:windowIsTranslucent">true</item> //是否半透明
<item name="android:windowNoTitle">true</item>//是否显示title
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">true</item>
要想自定义一个正常的圆角的dialog,就要注意设置其windowBackground的属性是透明的,然后自己画的shape设置corners
常用方法
①setMessage():设置简单的文本
②setItems():设置对话框内容为简单列表项
③setSingleChoiceItems()设置对话框内容为单选列表项
④setMultiChoiceItems():设置对话框内容为多选列表项
⑤setAdapter():设置对话框内容为自定义列表项
⑤setView():设置对话框的内容为自定义View
以上讲解完!欢迎大家交流学习
- Android中Dialog的使用
- Android中Dialog的使用
- Android中Dialog的使用
- Android中Dialog的使用
- Android中Dialog的使用
- Android中Dialog的使用
- android中dialog的使用
- Android中Dialog的使用
- Android中Dialog的使用
- Android 中dialog的使用
- Android中Dialog的使用
- Android中dialog的使用
- Android中Dialog的使用
- android中Dialog的使用
- Android中Dialog的使用
- Android中对话框(dialog)的使用
- Android开发中Dialog对话框的使用
- Android开发中Dialog对话框的使用
- stl之queue(队列)的使用
- 关于移动页面开发的初级认识与布局
- 步进电机基本知识
- 使用redis缓存数据需要注意的问题以及个人的一些思考和理解
- CSS之元素定位
- Android中dialog的使用
- jffs2文件系统制作
- Java面试必会的40个问题
- iOS多线程之GCD
- java设计模式之代理模式
- 解析如何在C语言中调用shell命令的实现方法
- 华为OJ ---计算日期到天数的转换(给定一个日期,输出为这一年的第几天)
- ORACLE 中ROWNUM用法总结! (转)
- Web开发入门基本知识