一、简单的内容文本弹出式对话框
还是一样MainActivity的布局文件就不放上了,就是一个简单的Button控件,在Java代码中为其绑定了一个监听器。

首先我们需要创建这个AlertDialog,因此我们新建一个方法initDialog,在此之前我们需要在全局声明一个AlertDialog对象(AlertDialog alertDialog;),下面的方法中就是在全局声明了AlertDialog对象的前提下。

    /*初始化AlertDialog*/public void initDialog(){//创建AlertDialog的构造器的对象AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);//设置构造器标题builder.setTitle("提示");//构造器对应的图标builder.setIcon(R.mipmap.ic_launcher);//构造器内容,为对话框设置文本项(之后还有列表项的例子)builder.setMessage("你是否要狠心离我而去?");//为构造器设置确定按钮,第一个参数为按钮显示的文本信息,第二个参数为点击后的监听事件,用匿名内部类实现builder.setPositiveButton("是呀", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){//第一个参数dialog是点击的确定按钮所属的Dialog对象,第二个参数which是按钮的标示值finish();//结束App}});//为构造器设置取消按钮,若点击按钮后不需要做任何操作则直接为第二个参数赋值nullbuilder.setNegativeButton("不呀",null);//为构造器设置一个比较中性的按钮,比如忽略、稍后提醒等builder.setNeutralButton("稍后提醒",null);//利用构造器创建AlertDialog的对象,实现实例化alertDialog=builder.create();}

在创建AlertDialog对象成功后,在需要显示AlertDialog时用alertDialog.show()即可,否则无法显示。

由于项目要求是App在退出时跳出弹出式对话框提醒用户是否退出,因此需要重写Android系统返回按键的监听事件

    /*** 表示点击安卓系统返回键时触发的回调方法*/@Overridepublic void onBackPressed(){//当AlertDialog存在实例对象并且没有在展示时if(alertDialog!=null&&!alertDialog.isShowing()){alertDialog.show();}}

下面放上整个App的代码

package com.studio.alertdialogdemo;import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;/*
演示AlertDialog的基本使用*/
public class MainActivity extends AppCompatActivity
{private AlertDialog alertDialog;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initDialog();}/*初始化AlertDialog*/public void initDialog(){//创建AlertDialog的构造器的对象AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);//设置构造器标题builder.setTitle("提示");//构造器对应的图标builder.setIcon(R.mipmap.ic_launcher);//构造器内容,为对话框设置文本项(之后还有列表项的例子)builder.setMessage("你是否要狠心离我而去?");//为构造器设置确定按钮,第一个参数为按钮显示的文本信息,第二个参数为点击后的监听事件,用匿名内部类实现builder.setPositiveButton("是呀", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){//第一个参数dialog是点击的确定按钮所属的Dialog对象,第二个参数which是按钮的标示值finish();//结束当前Activity}});//为构造器设置取消按钮,若点击按钮后不需要做任何操作则直接为第二个参数赋值nullbuilder.setNegativeButton("不呀",null);//为构造器设置一个比较中性的按钮,比如忽略、稍后提醒等builder.setNeutralButton("稍后提醒",null);//利用构造器创建AlertDialog的对象,实现实例化alertDialog=builder.create();}/*实现Button监听器的除了内部类外的方法点击Button时弹出AlertDialog*/public void showDialog(View v){//当AlertDialog存在实例对象并且没有在展示时if(alertDialog!=null&&!alertDialog.isShowing())alertDialog.show();}/*** 表示点击安卓系统返回键时回调的方法*/@Overridepublic void onBackPressed(){//当AlertDialog存在实例对象并且没有在展示时if(alertDialog!=null&&!alertDialog.isShowing()){alertDialog.show();}}
}

当我们点击了返回键时,效果图如图

之后只有我们点击是呀才会退出当前App

二、列表式弹出式对话框
首先放上布局文件效果图

我们最终要实现的效果就是:
1、点击设置字体颜色按钮,弹出一个列表式对话框,当我们点击其中的列表项时MainActivity中的TextView文本内容HelloWorld会变成对应的颜色

/*** 创建并显示普通列表的AlertDialog方法*/public void showListDialog(){AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);builder.setTitle("设置字体颜色");/*利用android.R.drawable.xxx调用安卓系统内置图标*/builder.setIcon(android.R.drawable.btn_star);/*利用setItems方法为Dialog设置列表项,setItems(数据源的资源ID[这里的资源是一个定义在string.xml中的字符串数组],点击item中的选项时触发的监听事件)*/builder.setItems(R.array.colors_name, new DialogInterface.OnClickListener(){/*int which 表示点击的item在string.xml文件字符串数组中的下标*/@Overridepublic void onClick(DialogInterface dialog, int which){switch (which){case 0:{textView.setTextColor(Color.RED);break;}case 1:{textView.setTextColor(Color.GREEN);break;}case 2:{textView.setTextColor(Color.BLUE);break;}}}});builder.create().show();}

以下是列表项的资源文件(string.xml中的一个string-array)

<resources><string name="app_name">AlertDialogList</string><string name="str_color">设置字体颜色</string><!--设置字体颜色AlertDialog显示的列表文本--><string-array name="colors_name"><item>红色</item><item>绿色</item><item>蓝色</item></string-array></resources>

三、单选列表弹出式对话框
当我们点击设置字体大小按钮时,弹出一个单选列表对话框,我们选择一种字号后MainActivity中的TextView文本内容就会变化成对应的字号,string.xml文件中设置的是小号为15sp,中号为20sp,大号为25sp,特大号为30sp,并且选择后该对话框自动消失。

首先创建这个单选式对话框

    /*** 展示单选列表AlertDialog的方法*/public void showSingleListDialog(){AlertDialog.Builder builder=new AlertDialog.Builder(this);builder.setTitle("设置字体大小");builder.setIcon(android.R.drawable.btn_star);//为AlertDialog设置单选列表//setSingleChoiceItems(数据资源id,默认被选中的item下标[-1表示没有默认选中],点击item触发的监听事件)builder.setSingleChoiceItems(R.array.font_name, checkedItemId, new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){checkedItemId=which;switch (which){case 0:textView.setTextSize(15);break;case 1:textView.setTextSize(20);break;case 2:textView.setTextSize(25);break;case 3:textView.setTextSize(30);break;}alertDialog.dismiss();//表示点击item后自动关闭整个Dialog,因为单选列表Dialog选择后是不会自动关闭的,因此需要此语句辅助关闭。}});alertDialog=builder.create();alertDialog.show();}

单选式列表资源文件

<resources><string name="app_name">AlertDialogList</string><string name="str_color">设置字体颜色</string><!--设置字体大小AlertDialog显示的列表文本--><string-array name="font_name"><item>小号</item><item>中号</item><item>大号</item><item>特大号</item></string-array>
</resources>

四、图文列表式对话框
这种图文并存的对话框稍微复杂一些,涉及到适配器的问题,因此具体将会在ListView的学习中详细讲解,这里先放上效果图及代码。
在点击设置按钮之后会弹出图文列表式对话框,之后点击其中的列表项将会跳转到安卓系统对应的设置界面。

    /*** 展示适配器列表AlertDialog,即图片文本列表*/public void showAdapterListDialog(){AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);builder.setTitle("打开设置");builder.setIcon(android.R.drawable.btn_star);//获得列表项显示的文本数组String[] stringNames=getResources().getStringArray(R.array.setting_names);//获得列表项显示的图片名称数组String[] imageNames=getResources().getStringArray(R.array.setting_images);//创建SimpleAdapter的数据源,String为列表中每一行显示的类型名称(如图片、文字),Object是因为显示的有文字又有图片所以用ObjectList<Map<String,Object>> data=new ArrayList<Map<String,Object>>();for(int i=0;i<stringNames.length;i++){Map<String,Object> map=new HashMap<String,Object>();map.put("setting",stringNames[i]);//getIdentifier() 根据资源的名称和类型获取资源的idint imageId=getResources().getIdentifier(imageNames[i],"drawable",getPackageName());map.put("image",imageId);data.add(map);}SimpleAdapter adapter=new SimpleAdapter(this,data,R.layout.list_item,new String[]{"setting","image"},new int[]{R.id.tv_name,R.id.iv_logo});//setAdapter(适配器对象,点击列表项触发的监听事件)builder.setAdapter(adapter, new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){Intent intent=null;//which指的也是每个列表项的下标,从0开始switch (which){case 0://点击wifi设置项,则创建一个可以跳转到Android系统WiFi设置页面的intent对象{intent=new Intent(Settings.ACTION_WIFI_SETTINGS);break;}case 1://蓝牙设置{intent=new Intent(Settings.ACTION_BLUETOOTH_SETTINGS);break;}case 2://声音设置{intent=new Intent(Settings.ACTION_SOUND_SETTINGS);break;}case 3://日期设置{intent = new Intent(Settings.ACTION_DATE_SETTINGS);break;}}startActivity(intent);//跳转到相应的界面}});builder.create().show();}

对应图文列表项的资源文件,注意要先将image01~image04放到drawable文件夹下。

<resources><string name="app_name">AlertDialogList</string><string name="str_color">设置字体颜色</string><!--设置AlertDialog显示的列表文本--><string-array name="setting_names"><item>wifi设置</item><item>蓝牙设置</item><item>声音设置</item><item>日期设置</item></string-array><!--设置AlertDialog显示图片的名称--><string-array name="setting_images"><item>image01</item><item>image02</item><item>image03</item><item>image04</item></string-array></resources>

最后放上一整个项目的整体Java代码和布局文件

<resources><string name="app_name">AlertDialogList</string><string name="str_color">设置字体颜色</string><!--设置字体颜色AlertDialog显示的列表文本--><string-array name="colors_name"><item>红色</item><item>绿色</item><item>蓝色</item></string-array><!--设置AlertDialog显示的列表文本--><string-array name="setting_names"><item>wifi设置</item><item>蓝牙设置</item><item>声音设置</item><item>日期设置</item></string-array><!--设置AlertDialog显示图片的名称--><string-array name="setting_images"><item>image01</item><item>image02</item><item>image03</item><item>image04</item></string-array><!--设置字体大小AlertDialog显示的列表文本--><string-array name="font_name"><item>小号</item><item>中号</item><item>大号</item><item>特大号</item></string-array><!--字号大小对应的数值--><string-array name="font_value"><item>15</item><item>20</item><item>25</item><item>30</item></string-array>
</resources>
package com.studio.alertdialoglist;import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.provider.Settings;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SimpleAdapter;
import android.widget.TextView;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;/*** 演示AlertDialog中各种列表形式*/
public class MainActivity extends AppCompatActivity
{private Button button_color,button_setting,button_size;private TextView textView;private AlertDialog alertDialog;private int checkedItemId=0;//AlertDialog单选列表中默认被选中的item下标;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}public void initView(){button_size= (Button) findViewById(R.id.button_size);button_color=(Button) findViewById(R.id.button_color);button_setting=(Button) findViewById(R.id.button_setting);textView=(TextView) findViewById(R.id.textView);button_color.setOnClickListener(new ButtonListener());button_setting.setOnClickListener(new ButtonListener());button_size.setOnClickListener(new ButtonListener());}class ButtonListener implements View.OnClickListener{@Overridepublic void onClick(View v){switch (v.getId()){case R.id.button_color: //设置字体的颜色{showListDialog();break;}case R.id.button_setting: //设置界面{showAdapterListDialog();break;}case R.id.button_size://设置字体大小{showSingleListDialog();break;}}}}/*** 创建普通列表的AlertDialog方法*/public void showListDialog(){AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);builder.setTitle("设置字体颜色");//利用android.R.drawable.xxx调用安卓系统内置图标builder.setIcon(android.R.drawable.btn_star);//利用setItems方法为Dialog设置列表项,setItems(数据源的资源ID[这里的资源是一个定义在string.xml中的字符串数组],点击item中的选项时触发的监听事件)builder.setItems(R.array.colors_name, new DialogInterface.OnClickListener(){//int which 表示点击的item在string.xml文件字符串数组中的下标@Overridepublic void onClick(DialogInterface dialog, int which){switch (which){case 0:{textView.setTextColor(Color.RED);break;}case 1:{textView.setTextColor(Color.GREEN);break;}case 2:{textView.setTextColor(Color.BLUE);break;}}}});builder.create().show();}/*** 展示适配器列表AlertDialog,即图片文本列表*/public void showAdapterListDialog(){AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);builder.setTitle("打开设置");builder.setIcon(android.R.drawable.btn_star);//获得列表项显示的文本数组String[] stringNames=getResources().getStringArray(R.array.setting_names);//获得列表项显示的图片名称数组String[] imageNames=getResources().getStringArray(R.array.setting_images);//创建SimpleAdapter的数据源,String为列表中每一行显示的类型名称(如图片、文字),Object是因为显示的有文字又有图片所以用ObjectList<Map<String,Object>> data=new ArrayList<Map<String,Object>>();for(int i=0;i<stringNames.length;i++){Map<String,Object> map=new HashMap<String,Object>();map.put("setting",stringNames[i]);//getIdentifier() 根据资源的名称和类型获取资源的idint imageId=getResources().getIdentifier(imageNames[i],"drawable",getPackageName());map.put("image",imageId);data.add(map);}SimpleAdapter adapter=new SimpleAdapter(this,data,R.layout.list_item,new String[]{"setting","image"},new int[]{R.id.tv_name,R.id.iv_logo});//setAdapter(适配器对象,点击列表项触发的监听事件)builder.setAdapter(adapter, new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){Intent intent=null;//which指的也是每个列表项的下标,从0开始switch (which){case 0://点击wifi设置项,则创建一个可以跳转到Android系统WiFi设置页面的intent对象{intent=new Intent(Settings.ACTION_WIFI_SETTINGS);break;}case 1://蓝牙设置{intent=new Intent(Settings.ACTION_BLUETOOTH_SETTINGS);break;}case 2://声音设置{intent=new Intent(Settings.ACTION_SOUND_SETTINGS);break;}case 3://日期设置{intent = new Intent(Settings.ACTION_DATE_SETTINGS);break;}}startActivity(intent);//跳转到相应的界面}});builder.create().show();}/*** 展示单选列表AlertDialog的方法*/public void showSingleListDialog(){AlertDialog.Builder builder=new AlertDialog.Builder(this);builder.setTitle("设置字体大小");builder.setIcon(android.R.drawable.btn_star);//为AlertDialog设置单选列表//setSingleChoiceItems(数据资源id,默认被选中的item下标[-1表示没有默认选中],点击item触发的监听事件)builder.setSingleChoiceItems(R.array.font_name, checkedItemId, new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){checkedItemId=which;switch (which){case 0:textView.setTextSize(15);break;case 1:textView.setTextSize(20);break;case 2:textView.setTextSize(25);break;case 3:textView.setTextSize(30);break;}alertDialog.dismiss();//表示点击item后自动关闭整个Dialog,因为单选列表Dialog选择后是不会自动关闭的,因此需要此语句辅助关闭。}});alertDialog=builder.create();alertDialog.show();}
}

有关其他Dialog的基础知识见桌面Android文件夹下的”Dialog基础知识.pdf”

Android之AlertDialog(弹出式对话框)的使用相关推荐

  1. Android studio Dialog 弹出式对话框

    文件结构 这里写图片描述 运行效果 这里写图片描述 主要代码 MainActivity package cn.edu.sicnu.dialogdemo; import android.app.Dial ...

  2. 5弹出阴影遮罩_千文详述Cocos Creator弹出式对话框实现技术,着实硬核

    正文 在Cocos Creator游戏开发中,经常需要使用到弹出式对话框,下面我们就一起来封装下自己的弹出式对话框. 一.弹出式对话框原理解析 1:对话框的结构: 1. `根节点 -->`2. ...

  3. android studio 弹出式对话框设置时间_如何设置当单击某个对象时运行指定的应用程序?...

    在放映幻灯片的过程中,有时会需要启动其他应用程序,比如计算器或记事本来做一些辅助性的工作.在PowerPoint 2010中能否通过单击某个对象来运行指定的应用程序? 1解决方案 为指定对象设置动作效 ...

  4. java常用弹出式对话框

    显示一个错误对话框,该对话框显示的 message 为 'alert': JOptionPane.showMessageDialog(null, "alert", "al ...

  5. AlertDialog弹出对话框条件不成立不消失

    很多时候,我们需要使用AlertDialog弹出一个对话框,但系统的AlertDialog对话框一旦点击了按钮,就会退出,而有时候我们需要 在对话框中判断条件,条件不成立则对话框不消失,如弹出一个密码 ...

  6. Android之PopupWindow弹出对话框

    Android的对话框常用的有两种:PopupWindow和AlertDialog. popupWindow是一个阻塞式的弹出框,这就意味着在我们退出这个弹出框之前,程序会一直等待,,这就意味着在我们 ...

  7. AlertDialog弹出对话框

    AlertDialog弹出对话框 以下主要代码: package com.example.alertdialog;import android.app.Activity; import android ...

  8. Android自定义控件:NestedScrolling实现仿魅族flyme6应用市场应用详情弹出式layout

    在前一篇博文中已经实现过一个仿魅族flyme6应用市场应用详情弹出式layout: Android自定义控件:从零开始实现魅族flyme6应用市场应用详情弹出式layout,主要是通过viewDrag ...

  9. android 7.1 权限自动授权(不弹出授权对话框)

    1.第一种方式: 修改 DefaultPermissionGrantPolicy.java这个类 说明: 指定包名进行自动授权,即指定的包名进行动态授权时,不弹出授权对话框自动授权 源码路径:/sc6 ...

最新文章

  1. 我的学习笔记_Windows_HOOK编程 2009-12-03 11:19
  2. Oracle里面的用户smsdb无法登录 LOCKED(TIMED)
  3. 工信部王卫明:我国5G研发开局良好
  4. npm的插件如何直接在html中使用,webpack插件之htmlWebpackPlugin
  5. java 国际化 properties_java Properties 读取文件,国际化
  6. Oracle入门(十二H)之设置、恢复和删除不可用列
  7. 前端学习(575):margin无效情形之鞭长莫及导致无效
  8. Java API概述及应用
  9. 宕机了,Redis数据丢了怎么办?
  10. 使用HttpModule实现多个域名分别“绑定”到子目录
  11. 开源软件的许可(License)
  12. 利用Python爬虫和Tableau分析链家网二手房信息
  13. 在win10系统中批量修改文件名称
  14. iphone个系列尺寸_iPhone9只是套模iPhone8,这些才是iPhone经典款,你用过哪些?
  15. 外汇会计-概念-即期汇率
  16. zynq linux环境移植,ZYNQ 7030 Linux 系统移植
  17. vue中 div高度随另一个div的高度变化
  18. 1660s功耗多少w_华硕GTX1660S功耗及散热对比GTX1060 3G 这才是甜品显卡的优势
  19. 蓝桥杯习题-2019 第十届-研究生组-RSA加密-java
  20. java中abstract详解

热门文章

  1. 台式计算机市场占有率,笔记本和台式机电脑的市场占有率的数据分析
  2. 亚马逊是如何成为全球最佳雇主的?
  3. ios 新浪微博网页登陆分享 {error:userinfoerror pos:5}
  4. 我与python第一次亲密接触
  5. linux的crontab定时任务完整配置和定时任务不执行分析
  6. tf2读tfrecord文件
  7. Spring注解——@Profile详解
  8. iPhone X用户需要知道的12个隐藏小技巧 条条实用
  9. 24.shell中list详解,定义list,获取List的总个数,获取list的某个元素值,将list的每个元素转换成以空格分隔的字符串,空格分隔的字符串转换成list,for循环list
  10. g++: 找不到 ‘cc1plus‘ 的解决办法