Android常用对话框使用大全

日常生活中我们随处可见对话框,上面有很多提示信息,更加方便提示用户进行不同的操作。

一、对话框的两个特点和一些常见的对话框

1.当弹出对话框是会结束UI线程(即主线程);

2.当前的Activity会失去焦点;

3.消息对话框、确认对话框、列表对话框、单选和多选对话框、自定义对话框

二、对话框的组成(一般有四部分组成)

1.图标

2.标题

3.内容

4.按钮

三、那么如何创建一个对话框呢?(四步组成)

1.第一步创建AlertDialog.Builder对象(建造者模式)

2.第二步设置图标、标题、内容和按钮等区域

3.第三步调用create()方法来创建(一般自动调用)

4.第四步调用show()方法来显示

四、点击跳转界面和长按弹出对话框的业务逻辑

1.接着上面的学的ListView来实现常见的操作,在日常生活中,我们经常聊qq,在聊天列表中,但我们点击某一行时,会进入聊天界面,当我们长按某一行时,会弹出置顶和删除小提示。

2.MainActivity.java代码如下

package com.oldtogether.adapterdemo2; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.view.View.OnLongClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; public class MainActivity4 extends ActionBarActivity implements OnItemClickListener, OnItemLongClickListener { // 创建数组,采用for循环进行遍历 private int[] imageIds = new int[] { R.drawable.daxiang, R.drawable.maozi, R.drawable.nangua, R.drawable.nanguobq, R.drawable.tiaopi, R.drawable.xiaolian, R.drawable.xin, R.drawable.weixin, R.drawable.hongx, R.drawable.xm }; private String[] titles = new String[] { "卖萌大象", "圣诞帽子", "愤怒南瓜", "难过表情", "调皮表情", "我倩的笑脸表情", "oldtogether爱心", "微信", "粉色少女心", "一代撸" }; private String[] versions = new String[] { "版本:1.10", "版本:2.10", "版本:1.11", "版本:2.12", "版本:3.10", "版本:2.20", "版本:5.20", "版本:1.23", "版本:2.21", "版本:2.40", }; private String[] sizes = new String[] { "大小:32.01M", "大小:32.02M", "大小:23.01M", "大小:11.01M", "大小:41.01M", "大小:11.01M", "大小:33.01M", "大小:33.01M", "大小:33.01M", "大小:33.01M", }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.listview); // 1、过的ListView对象 ListView lv = (ListView) findViewById(R.id.lv_play); // 2、数据源 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); for (int i = 0; i < titles.length; i++) { Map<String, Object> map = new HashMap<String, Object>(); map.put("logo", imageIds[i]); map.put("title", titles[i]); map.put("version", versions[i]); map.put("size", sizes[i]); list.add(map); } // 3、设置适配器 MyAdapter3 adapter3 = new MyAdapter3(this); adapter3.setList(list);// 传入数据 // 4、关联适配器 lv.setAdapter(adapter3); // 5、为ListView设置事件监听器(一下两个常用事件),让主MainActivity2实现接口,并重写方法 lv.setOnItemClickListener(this); lv.setOnItemLongClickListener(this); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { /* 创建了一个意图对象,调用setClass方法表明“在那个Activity中调用那个Activity”次意图*/ Intent intent = new Intent(); intent.setClass(getApplicationContext(), DetailActivity.class); //获得点击行的数据 HashMap <String,Object> itemMap= (HashMap<String,Object>) parent.getItemAtPosition(position); intent.putExtra("index", ""+position);//获得编号 intent.putExtra("title", ""+itemMap.get("title"));//获得标题 startActivity(intent); } @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { AlertDialog.Builder builder=new AlertDialog.Builder(this); builder.setIcon(R.drawable.ic_launcher); builder.setTitle("消息提示"); builder.setMessage("这是一个简单的标题"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //点击对话框中的确定按钮会出现一个Toast提示框 Toast.makeText(MainActivity4.this, "点击了确定", Toast.LENGTH_LONG).show(); } }); builder.create().show(); return true; /* * 返回值代表了事件的消化 1、true:表示消化掉事件,事件不会继续传递 2、false:表示不消化事件,事件继续传递 * 结论:如果希望长按事件后,不在出现点击事件,则应将返回值设置为true */ } }

3.代码简洁之“连点”

1).通过创建者模式获得Builder对象,然后通过连点方式调用其方法可使代码简化;

2).连点使用的原则是,所调用的方法返回值是当前对象本身;

3).下面是通过连点在长按方法中实现此相同功能的代码。

@Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { new AlertDialog.Builder(this) .setIcon(R.drawable.ic_launcher) .setTitle("消息提示") .setMessage("这是一个简单的标题") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity4.this, "点击了确定", Toast.LENGTH_LONG).show(); } }) .show(); return true; }

4.运行结果

五、上面是消息对话框的实现,再次紧接着学习确认对话框

1.随处可见的确认对话框,用途:经常用于一些征求用户决定的操作,比如退出数据、删除数据、确认支付等。

2.直接贴代码

package com.oldtogether.adapterdemo2; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.view.View.OnLongClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; public class MainActivity4 extends ActionBarActivity implements OnItemClickListener, OnItemLongClickListener { // 创建数组,采用for循环进行遍历 private int[] imageIds = new int[] { R.drawable.daxiang, R.drawable.maozi, R.drawable.nangua, R.drawable.nanguobq, R.drawable.tiaopi, R.drawable.xiaolian, R.drawable.xin, R.drawable.weixin, R.drawable.hongx, R.drawable.xm }; private String[] titles = new String[] { "卖萌大象", "圣诞帽子", "愤怒南瓜", "难过表情", "调皮表情", "我倩的笑脸表情", "oldtogether爱心", "微信", "粉色少女心", "一代撸" }; private String[] versions = new String[] { "版本:1.10", "版本:2.10", "版本:1.11", "版本:2.12", "版本:3.10", "版本:2.20", "版本:5.20", "版本:1.23", "版本:2.21", "版本:2.40", }; private String[] sizes = new String[] { "大小:32.01M", "大小:32.02M", "大小:23.01M", "大小:11.01M", "大小:41.01M", "大小:11.01M", "大小:33.01M", "大小:33.01M", "大小:33.01M", "大小:33.01M", }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.listview); // 1、过的ListView对象 ListView lv = (ListView) findViewById(R.id.lv_play); // 2、数据源 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); for (int i = 0; i < titles.length; i++) { Map<String, Object> map = new HashMap<String, Object>(); map.put("logo", imageIds[i]); map.put("title", titles[i]); map.put("version", versions[i]); map.put("size", sizes[i]); list.add(map); } // 3、设置适配器 MyAdapter3 adapter3 = new MyAdapter3(this); adapter3.setList(list);// 传入数据 // 4、关联适配器 lv.setAdapter(adapter3); // 5、为ListView设置事件监听器(一下两个常用事件),让主MainActivity2实现接口,并重写方法 lv.setOnItemClickListener(this); lv.setOnItemLongClickListener(this); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { /* 创建了一个意图对象,调用setClass方法表明“在那个Activity中调用那个Activity”次意图*/ Intent intent = new Intent(); intent.setClass(getApplicationContext(), DetailActivity.class); //获得点击行的数据 HashMap <String,Object> itemMap= (HashMap<String,Object>) parent.getItemAtPosition(position); intent.putExtra("index", ""+position);//获得编号 intent.putExtra("title", ""+itemMap.get("title"));//获得标题 startActivity(intent); } @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { //长按之确定对话框 new AlertDialog.Builder(this) .setIcon(R.drawable.ic_launcher) .setTitle("你确定要退出吗?") .setNegativeButton("取消", null)//null,说明不进行自定义的任何操作,只是单纯的关闭当前对话框,又停在原界面 .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish();//关闭当前Activity } }) .show(); return true; } }

3.运行结果

4.补充:当点击取消是会停留在当前Activity;当点击确定会退出当前Activity,返回到模拟器主界面。

六、列表对话框

1.用途:以列表的形式展示数据、列表项可点击、需要一个数组资源作为数据源。

2.核心方法:setItems();在准备一个数组资源;

3.代码如下:

package com.oldtogether.adapterdemo2; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.view.View.OnLongClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; public class MainActivity4 extends ActionBarActivity implements OnItemClickListener, OnItemLongClickListener { // 创建数组,采用for循环进行遍历 private int[] imageIds = new int[] { R.drawable.daxiang, R.drawable.maozi, R.drawable.nangua, R.drawable.nanguobq, R.drawable.tiaopi, R.drawable.xiaolian, R.drawable.xin, R.drawable.weixin, R.drawable.hongx, R.drawable.xm }; private String[] titles = new String[] { "卖萌大象", "圣诞帽子", "愤怒南瓜", "难过表情", "调皮表情", "我倩的笑脸表情", "oldtogether爱心", "微信", "粉色少女心", "一代撸" }; private String[] versions = new String[] { "版本:1.10", "版本:2.10", "版本:1.11", "版本:2.12", "版本:3.10", "版本:2.20", "版本:5.20", "版本:1.23", "版本:2.21", "版本:2.40", }; private String[] sizes = new String[] { "大小:32.01M", "大小:32.02M", "大小:23.01M", "大小:11.01M", "大小:41.01M", "大小:11.01M", "大小:33.01M", "大小:33.01M", "大小:33.01M", "大小:33.01M", }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.listview); // 1、过的ListView对象 ListView lv = (ListView) findViewById(R.id.lv_play); // 2、数据源 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); for (int i = 0; i < titles.length; i++) { Map<String, Object> map = new HashMap<String, Object>(); map.put("logo", imageIds[i]); map.put("title", titles[i]); map.put("version", versions[i]); map.put("size", sizes[i]); list.add(map); } // 3、设置适配器 MyAdapter3 adapter3 = new MyAdapter3(this); adapter3.setList(list);// 传入数据 // 4、关联适配器 lv.setAdapter(adapter3); // 5、为ListView设置事件监听器(一下两个常用事件),让主MainActivity2实现接口,并重写方法 lv.setOnItemClickListener(this); lv.setOnItemLongClickListener(this); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { /* 创建了一个意图对象,调用setClass方法表明“在那个Activity中调用那个Activity”次意图*/ Intent intent = new Intent(); intent.setClass(getApplicationContext(), DetailActivity.class); //获得点击行的数据 HashMap <String,Object> itemMap= (HashMap<String,Object>) parent.getItemAtPosition(position); intent.putExtra("index", ""+position);//获得编号 intent.putExtra("title", ""+itemMap.get("title"));//获得标题 startActivity(intent); } @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { //列表对话框 final String [] sites={"打印店","男生公寓","女生公寓","清真食堂","大众食堂","图书馆","洗浴中心"};//设置为final(常量)的原因是可以穿透作用域 new AlertDialog.Builder(this) .setTitle("兰州城市学院培黎校区") .setItems(sites, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //参数 which代表了消息对话框中的第几项 Toast.makeText(MainActivity4.this, "您选择了"+sites[which], Toast.LENGTH_LONG).show(); } }) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //关闭的对话框的第二种方式,重写一个没有任何逻辑的空方法 } }) .show(); return true; } }

4.运行结果

七、单选对话框

1.单选对话框,用途:需要用户进行单行选择是进行使用;核心方法:setSingleChoiceItems();

2.实现步骤

1).准备一个数组资源(一般设置为常量数组,为了方便穿透作用域);

2).调用setSingleChioceItems()设置单选列表项。

3.代码实现(直接在onItemLongClick写Dialog相关代码,其他代码一样)

//在主类中的全局变量1、暂存用户所选的评分级别;(另外如果将此变量初始值设为0,直接点击确定会出现1星评分,有bug)2、方便穿透作用域; int selectedId = -1; @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { //长按之单选对话框 final String [] stars={"1星","2星","2星","3星","4星","5星"};//设置为final(常量)的原因是可以穿透作用域 new AlertDialog.Builder(this) .setTitle("大胸弟,来个5星的评分吧!") .setSingleChoiceItems(stars, -1, new DialogInterface.OnClickListener() { /* * 第一个参数:所要显示的资源数组; * 第二个参数:在单选对话框列表中默认情况先所选择的行标(这里设置为-1的原因是数组默认情况先下标从0开始,如果将此参设置为0,跳出单选对话框时默认情况下会为1星评分,有bug); * 第三个参数:点击某行事件,自定义业务逻辑代码(这里只用简单的Toast来实现); * 补充:dialog.dismiss()让对话框消失。 */ @Override public void onClick(DialogInterface dialog, int which) { selectedId = which;//在用户单选时起到一个暂存的作用,方便确定是被引用 Toast.makeText(MainActivity4.this, "您当前选择了:"+stars[which], Toast.LENGTH_LONG).show(); } }) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity4.this, "您最终的决定是:"+stars[selectedId], Toast.LENGTH_LONG).show(); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //空操作的方法 } }) .show(); return true; }

4.运行结果

八、多选对话框

1.多选对话框。用途:提供用户进行多项选择;核心方法setMultiChoiceItems();(multi:英语中多的意思)

2.实现步骤

1).准备一个数组资源;

2).调用setMultiChoiceItems()方法设置多选项列表;

3.代码的实现(同理直接贴onItemLongClick()方法代码)

ArrayList<Integer> choice = new ArrayList<>();//创建一个ArrayList用来保存在Dialog中所选择的选项,同理设置为全局变量为了穿透作用域 @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { //长按之多选框对话框 final String [] interests={"看书","打篮球","大lol","听音乐","看电影","跑步"};//设置为final(常量)的原因是可以穿透作用域 new AlertDialog.Builder(this) .setIcon(R.drawable.ic_launcher) .setTitle("你的爱好是什么?") /* * setMultiChoiceItems()方法中的三个参数 * 第一个参数:资源数组; * 第二个参数:默认情况下的初始值,这里因为是多选,所以设置为boolean类型的数组; * 第三个参数:多选框的点击事件; * */ .setMultiChoiceItems(interests, new boolean []{false,false,false,false,false,false}, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { /* * 第一个参数:dialog对象; * 第二个参数:多选对话框中用户所选中的项; * 第三个参数:是否选中,true为选中,false为没有选中 * */ //选中则添加,后悔是时还可以remove掉 if(isChecked){ choice.add(which); }else{ choice.remove(which); } Toast.makeText(MainActivity4.this, "您当前的选择是:"+choice.toString(), Toast.LENGTH_LONG).show(); } }) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity4.this, "您最终的决定是:"+choice.toString(), Toast.LENGTH_LONG).show(); } }) .setNegativeButton("取消", null) .show(); return true; } }

4.运行结果

九、心得总结

1.提到对话框可以直接脑补出对话款的组成,和创建对话框的步骤;

2.在单选对话框中设置默认初始值时,“-1”的巧用,关键点是数组下标从0开始,容易出现bug;

3.关闭对话框的两种方法(在点击负面按钮时)。第一种:在次方法中的第二个参数添加一个重操作即没有任何逻辑代码点击事件即可;第二种:直接将第二个参数设置为null;

4.两次经典的穿透作用域(附带魔法和物理伤害)。第一次在定义数据资源的时候,将数组资源用final修饰,让其为常量,方便在其他方法中调用,即穿透作用域;第二次在创建单选和多选对话框时,setSingleChioceItems()和setMultiChoiceItems()方法中有时候用户可能会修改第一次的选择,而将次选择暂存在一个最外层类的成员变量中(这里的int selectedId和泛型ArrayList对象),方便在点击确定按钮即调用onClick方法是被利用,同样再次穿透了作用域;

5.总之,日常生活中常见各种对话框,合理利用对话框会更好的实现界面与用户之间的交流。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-11-05 21:46:40

Android常用对话框使用大全的相关文章

Android常用对话框使用大全_Android

日常生活中我们随处可见对话框,上面有很多提示信息,更加方便提示用户进行不同的操作. 一.对话框的两个特点和一些常见的对话框 1.当弹出对话框是会结束UI线程(即主线程): 2.当前的Activity会失去焦点: 3.消息对话框.确认对话框.列表对话框.单选和多选对话框.自定义对话框 二.对话框的组成(一般有四部分组成) 1.图标 2.标题 3.内容 4.按钮 三.那么如何创建一个对话框呢?(四步组成) 1.第一步创建AlertDialog.Builder对象(建造者模式) 2.第二步设置图标.标

36个Android开发常用经典代码大全_Android

本文汇集36个Android开发常用经典代码片段,包括拨打电话.发送短信.唤醒屏幕并解锁.是否有网络连接.动态显示或者是隐藏软键盘等,希望对您有所帮助. //36个Android开发常用代码片段 //拨打电话 public static void call(Context context, String phoneNumber) { context.startActivity( new Intent(Intent.ACTION_CALL, Uri.parse( "tel:" + pho

Android 对话框(Dialog)大全详解及示例代码_Android

Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog(int), dismissDialog(int)等方法,如果使用这些方法的话,Activity将通过getOwnerActivity()方法返回该Activity管理的对话框(dialog). onCreateDialog(int):当你使用这个回调函数时,Android系统会有效的设置这个Acti

《Android 应用案例开发大全(第二版)》——1.3节Android开发环境的搭建

1.3 Android开发环境的搭建 Android 应用案例开发大全(第二版) 本节主要讲解基于Eclipse的Android开发环境的搭建,模拟器的创建和运行,以及如何应用DDMS进行程序的调试. 1.3.1 Android SDK的安装及环境变量的配置 Android使用的编程语言是时下最流行的Java高级语言,Java的跨平台性和开源性,极大地促进了Android平台的发展. 首先要安装Java的JDK,并且正确地配置系统的环境变量(基于Windows操作系统).具体步骤如下. (1)

《Android 应用案例开发大全(第二版)》——1.4节 DDMS的灵活应用

1.4 DDMS的灵活应用 Android 应用案例开发大全(第二版) 作为一名合格的软件开发人员,必须要学会怎样去调试程序.因为调试是一个程序员最基本的技能,其重要性甚至超过学好一门语言.可以这样说,不会调试的程序员肯定不会有很好的发展. 那么什么是调试呢?所谓程序调试,是在软件投入实际使用前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程.这是保证软件系统正确性的必不可少的步骤. Android为开发人员提供了一个强大的调试工具--DDMS,通过DDMS可以调试并监控程序的运行

《Android 应用案例开发大全(第二版)》——1.7节Android应用程序的项目结构

1.7 Android应用程序的项目结构 Android 应用案例开发大全(第二版) 从上面的项目中读者已经知道了通过Android SDK可以自动生成一个项目包,但是没有对项目包里的内容进行介绍,本节对项目包中的内容进行一一介绍,项目包如图1-35所示. src源代码目录:该目录存放Android应用程序所有的源代码.该目录项有不同的包,包中对应开发的源程序,开发人员开发的主要精力都集中在开发src目录下内容. gen文件夹目录:该目录存放了Eclipse的ADT插件自动生成的R.java文件

【Android】对话框 AlertDialog

[Android]对话框 AlertDialog 本讲介绍一下Android基本组件:对话框AlertDialog.  来源:http://blog.csdn.net/feng88724/article/details/6171450 API: java.lang.Object    ↳ android.app.AlertDialog.Builder   使用AlertDialog.Builder创建对话框需要了解以下几个方法: setTitle :为对话框设置标题 setIcon :为对话框设

Android Dialog 对话框详解及示例代码_Android

Android Dialog 对话框 1.Dialog介绍 2.AlertDialog的基本使用 3.自定义对话框 Custom Dialog 一.Dialog介绍 Dialog也是Android中常用的用户界面元素,他同Menu一样也不是View的子类.让我们看一下它的继承关系: 这里要留意一下他的直接子类 AlertDialog,和间接子类 DatePickerDialog,ProgressDialog,TimePickerDialog,其中后三个我们在前面的章节已经讲过,今天我们把重点放在

PHP常用工具类大全附全部代码下载_php实例

废话不多说了,直接给大家贴php代码了,具体代码如下所示: <?php /** * 助手类 * @author www.shouce.ren * */ class Helper { /** * 判断当前服务器系统 * @return string */ public static function getOS(){ if(PATH_SEPARATOR == ':'){ return 'Linux'; }else{ return 'Windows'; } } /** * 当前微妙数 * @retu