导读

1.普通对话框AlertDialog
2.列表对话框ListDialog
3.单选对话框SingleDialog
4.多选对话框MultiDialog
5.输入对话框InputDialog
6.等待对话框WaitingDialog
7.进度条对话框ProgressDialog
8.自定义对话框Dialog
9.适配器的运用ArrayDialog

普通对话框AlertDialog

第一种:通过构建器

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Button
        android:id="@+id/button1"android:layout_width="match_parent"android:layout_height="200dp"android:onClick="click"android:text="Button" /></LinearLayout>

java文件

package com.hala.view01;import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.icu.util.Calendar;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_hala);}public void click(View v){/*AlertDialog的构造函数是被protected修饰的,所以包外是无法访问的,因此这里我们用构建器*/AlertDialog.Builder dialog=new AlertDialog.Builder(this);//设置标题dialog.setTitle("Emilia Clarke");//设置内容dialog.setMessage("Do you like Emilia Clarke?");//设置按钮,第一个参数是文本,第二个参数是按钮摆放在哪里以及点击后的反应dialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//退出程序MainActivity.this.finish();}});dialog.setNeutralButton("just soso", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this, "hahahha", Toast.LENGTH_SHORT).show();}});dialog.setNegativeButton("No",null);//注意这里show()方法中就包括了create()方法,所以这里不用先create()dialog.show();}/*简写方法public void click(View v){AlertDialog.Builder dialog=new AlertDialog.Builder(this);dialog.setTitle("Emilia Clarke").setMessage("Do you like Emilia Clarke?").setPositiveButton("Yes", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//退出程序MainActivity.this.finish();}}).setNeutralButton("just soso", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this, "hahahha", Toast.LENGTH_SHORT).show();}}).setNegativeButton("No",null).show();}*/}

显示结果

第二种:直接创建

布局文件同第一种

java文件

package com.hala.view01;import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.icu.util.Calendar;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_hala);}public void click(View v){//这里借助了构建器的create()方法AlertDialog dialog=new AlertDialog.Builder(this).create();//这里返回类型是void,所以不能简写dialog.setTitle("Emilia Clarke");//设置内容dialog.setMessage("Do you like Emilia Clarke?");//设置按钮,第一个参数是按钮类型,第二个参数是文本,第三个参数是按钮摆放在哪里以及点击后的反应dialog.setButton(DialogInterface.BUTTON_POSITIVE,"Yes", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//退出程序MainActivity.this.finish();}});dialog.setButton(DialogInterface.BUTTON_NEUTRAL,"just soso", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this, "hahahha", Toast.LENGTH_SHORT).show();}});//这里不能传null,可以什么都不写dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "No", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});//注意这里show()方法中就包括了create()方法,所以这里不用先create()dialog.show();}}

列表对话框ListDialog

package com.hala.view01;import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.icu.util.Calendar;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_hala);}public void click(View v) {final String[] items={"Yes","No","Just soso"};AlertDialog.Builder dialog=new AlertDialog.Builder(this);dialog.setTitle("Emilia Clarke")//设置选项.setItems(items, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//which代表列表内容的索引Toast.makeText(MainActivity.this, items[which], Toast.LENGTH_SHORT).show();}}).show();}}

显示结果

单选对话框SingleDialog

package com.hala.view01;import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.icu.util.Calendar;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_hala);}int i=0;public void click(View v) {final String[] items={"梅西","C罗","内马尔"};AlertDialog.Builder dialog=new AlertDialog.Builder(this);dialog.setTitle("选择你喜欢的球星")//参数1:选项//参数2:默认选项的索引//参数3:被选中后的事件//这里没有的话可以写null.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//i的作用是记下每次点击的索引,以便下边操作i=which;}})//这里的作用是点击后确定选择让对话框消失.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this, "我喜欢"+items[i], Toast.LENGTH_SHORT).show();}}).show();}}

显示结果

多选对话框MultiDialog

package com.hala.view01;import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.icu.util.Calendar;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_hala);}int i=0;public void click(View v) {final String[] items={"梅西","C罗","内马尔"};final boolean[] checked={false,false,false};AlertDialog.Builder dialog=new AlertDialog.Builder(this);dialog.setTitle("你喜欢哪个球星?")//参数1:选项//参数2:是否被选中//参数3:被点击的触发事件.setMultiChoiceItems(items, checked, new DialogInterface.OnMultiChoiceClickListener() {//注意这里不管是选中还是取消选中,都会触发onClick方法//而checked数组的作用就是记录谁被选中了//参数一:对话框本身//参数二:按钮的索引//参数三:点击后,按钮是否被选中true或者false@Overridepublic void onClick(DialogInterface dialog, int which, boolean isChecked) {//这里onClick其实是默认做了下边一个语句,所以我们可以不写// checked[which]=isChecked;}}).setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {String msg="我喜欢:";for (int i=0;i<checked.length;i++){if(checked[i])msg+=items[i]+" ";}Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();}}).show();}}

显示结果

输入对话框InputDialog

package com.hala.view01;import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_hala);}public void click(View v) {//输入对话框主要是EditText和setViewfinal EditText edt=new EditText(this);AlertDialog.Builder dialog=new AlertDialog.Builder(this);dialog.setTitle("请输入").setView(edt).setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this, edt.getText(), Toast.LENGTH_SHORT).show();}}).show();}}

显示结果

等待对话框WaitingDialog

package com.hala.view01;import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;public class MainActivity extends AppCompatActivity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_hala);}public void click(View v) {ProgressDialog dialog=new ProgressDialog(this);dialog.setTitle("等待对话框");dialog.setMessage("请等待");//Canceable默认为true,//true-点击返回键对话框消失//false-对话框不会消失,直到进度完成dialog.setCancelable(true);dialog.show();}}

显示结果

⚠️等待对话框的这种写法已经被谷歌更高版本取消。

进度条对话框ProgressDialog

public class MainActivity extends AppCompatActivity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_hala);}public void click(View v) {final ProgressDialog dialog=new ProgressDialog(this);dialog.setTitle("下载中");dialog.setMessage("请等待");//此句的作用是设置对话框进度为水平样式dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//如果设置为true,进度条会动,但不知道到哪去了dialog.setIndeterminate(false);dialog.show();//让进度条动起来要用一个线程new Thread(){@Overridepublic void run() {super.run();for(int i=0,j=0;i<=100;i++,j+=2){//设置进度条和次进度条dialog.setProgress(i);dialog.setSecondaryProgress(j);try {Thread.sleep(50);} catch (InterruptedException e) {e.printStackTrace();}}//进度完成后让对话框自动消失dialog.dismiss();}}.start();}}

显示结果

⚠️ProgressDialog在最新版本已经不使用

自定义对话框Dialog

activity_main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.hala.view01.MainActivity"><Button
        android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="8dp"app:layout_constraintRight_toRightOf="parent"android:layout_marginLeft="8dp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintBottom_toBottomOf="parent"android:layout_marginBottom="8dp"app:layout_constraintTop_toTopOf="parent"android:layout_marginTop="8dp"android:text="点我呀"android:onClick="click"/></android.support.constraint.ConstraintLayout>

MainActivity.java文件

package com.hala.view01;import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void click(View v){MyDialog dialog=new MyDialog(this);dialog.show();}}

activity_hala.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="300dp"android:orientation="vertical"android:background="#ff44ffff"><TextView
        android:layout_width="match_parent"android:layout_height="150dp"android:text="你确定要退出程序吗?"android:gravity="center"android:textSize="30sp"android:textColor="#000000"/><TextView
        android:layout_width="match_parent"android:layout_height="5dp"android:background="#ffffff"/><LinearLayout
        android:layout_width="match_parent"android:layout_height="150dp"><Button
            android:id="@+id/bt1"android:layout_width="wrap_content"android:layout_height="50dp"android:layout_gravity="center_vertical"android:gravity="center"android:background="#ffffff"android:text="Yes"android:layout_weight="1"/><TextView
            android:layout_width="wrap_content"android:layout_height="50dp"android:layout_gravity="center_vertical"android:layout_weight="1"/><Button
            android:id="@+id/bt2"android:layout_width="wrap_content"android:layout_height="50dp"android:layout_gravity="center_vertical"android:gravity="center"android:background="#ffffff"android:text="No"android:layout_weight="1"/></LinearLayout></LinearLayout>

MyDialog.java文件

package com.hala.view01;import android.app.Dialog;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.View;
import android.widget.Button;/*** Created by air on 2018/1/26.*//*
1.自定义一个类,继承于Dialog类(这确保了layout文件是以dialog形式出现的),在构造方法中调用setContentView()来设定对话框布局,这个布局也是自定义的
2.在values的styles.xml中自定义对话框的风格(不显示标题栏 不现实背景)
注意这里可以调用含两个参数(环境,风格)的构造函数,也可以调用含一个参数的构造函数,但改写super,如下
注意这里有简便方法,即完全将第二步去掉,新版的android默认运用你设定好的风格,这里只是为了演示多种方法
3.在自定义类中对自定义对话框的某些控件添加事件
4.在MainActivity中实例化自定义的对话框并显示*/public class MyDialog extends Dialog {Button bt1,bt2;public MyDialog(@NonNull Context context) {super(context,R.style.mydialog);//设定对话框的布局setContentView(R.layout.activity_hala);bt1=(Button) findViewById(R.id.bt1);bt2=(Button)findViewById(R.id.bt2);bt1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//退出整个程序System.exit(0);}});bt2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//控制对话框消失,注意它本身就写在MaDialog里,所以可以直接调用dismiss();}});}
}

styles.xml文件

<resources><!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item></style><!--parent是指继承标准对话框--><!--windowNoTitle是没有标题栏--><!--background设置为transparent意为透明--><style name="mydialog"parent="android:style/Theme.Dialog"><item name="android:windowNoTitle">true</item><item name="android:background">@android:color/transparent</item></style>
</resources>

适配器的运用ArrayDialog

适配器主要用于制作更加复杂的对话框样式,比如带有图标的

每个选项的布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><ImageView
        android:layout_width="wrap_content"android:layout_height="match_parent"android:src="@mipmap/ic_launcher"/><TextView
        android:id="@+id/tv"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="哈哈1"/></LinearLayout>

java文件

package com.hala.view01;import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.icu.util.Calendar;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void click(View v) {final String[] items={"Yes","No","Just soso"};/*数组适配器参数1:环境参数2:布局资源索引,指的是每项数据所呈现样式(需要自己设计)注意这里也可以引用android自带的,这样就不需要参数3了参数3:因为文字数组必须是在TextView内,所以要指定出你要放入参数2设定布局的哪一个TextView里参数4:引入的文本资源,可以是集合或数组*/ArrayAdapter adapter=new ArrayAdapter(this,R.layout.activity_hala,R.id.tv,items);AlertDialog.Builder dialog=new AlertDialog.Builder(this);dialog.setTitle("Emilia Clarke")//参数一:适配器对象(对数据显示样式的规则制定器)//参数二:监听器。可以设置为null,也可以设置点击后事件.setAdapter(adapter, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this,items[which], Toast.LENGTH_SHORT).show();dialog.dismiss();}}).show();}}

显示结果

Android 之路34---Dialog相关推荐

  1. Android 之路30---UI基础控件

    导读 1.TextView 2.Button 3.Android各种控件的监听器 4.EditText 5.ImageView及ImageButton 6.Android 中Xml文件引用资源的方法 ...

  2. Android窗口设计之Dialog、PopupWindow、系统窗口的实现

        窗口设计之Dialog.PopupWindow.系统窗口的实现 Android应用程序窗口设计系列博客: Android应用程序窗口设计之Window及WindowManager的创建 And ...

  3. (转) Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析

    转载[工匠若水 http://blog.csdn.net/yanbober ] 1 背景 之所以写这一篇博客的原因是因为之前有写过一篇<Android应用setContentView与Layou ...

  4. android 开发零起步学习笔记(二十二):ANDROID应用ACTIVITY、DIALOG、POPWINDOW、TOAST窗口添加机制及源码分析(一)

    原文:http://www.cnblogs.com/shanzei/p/4654817.html 第一部分: ANDROID应用ACTIVITY.DIALOG.POPWINDOW.TOAST窗口添加机 ...

  5. android 自定义dialog 定时关闭,Android编程实现自定义Dialog的大小自动控制方法示例...

    本文实例讲述了Android编程实现自定义Dialog的大小自动控制方法.分享给大家供大家参考,具体如下: Android应用开发中,无论是出于功能还是增加用户体验,弹出对话框(Dialog)进行一些 ...

  6. Android开发之自定义dialog的实现(源代码分享)

    使用系统自带的dialog如果不能满足我们日常开发的需求,那就得自己构建custom dialog,特别是对于一个app来说,统一的样式风格会给人一种舒服的感觉,所以dialog的样式 .色调一般都要 ...

  7. 如何让Android对话框全屏 Dialog 全屏

    如何让一个对话框全屏对话框: <style name="Theme.Application.Dialog.Alert" parent="android:Theme. ...

  8. Android初学第34天

    Android初学第34天 12_DateDialog 代码 Crime.java package com.bignerdranch.android.criminalintent;import jav ...

  9. Android应用Activity、Dialog、PopWindow、Toast窗体加入机制及源代码分析

    [工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重劳动成果] 1 背景 之所以写这一篇博客的原因是由于之前有写过一篇<Android应用setCont ...

  10. 【转】 Android常用实例—Alert Dialog的使用

    Android常用实例-Alert Dialog的使用 AlertDialog的使用很普遍,在应用中当你想要用户做出"是"或"否"或者其它各式各样的选择时,为了 ...

最新文章

  1. pandas的分列操作str.split()
  2. 知识图谱 vs. 对话系统专题讨论 - PaperWeekly 社区
  3. CodeForces - 1348C Phoenix and Distribution(思维)
  4. workaround for %33 texture memory bug
  5. Code-First Development with Entity Framework 4
  6. bzoj3322 最大生成树+LCA
  7. gdal库的三个使用心得
  8. 20220212:力扣第277场周赛(下)
  9. 为JavaScript日期添加天数
  10. 泰文Unicode编码表及排版规则
  11. Tomcat学习笔记(三)—— Server组件
  12. PostgreSQL AUTO INCREMENT
  13. lol大区服务器维护,LOL官宣“扩容升级”服务器,排队时间将大大减少,电一玩家喜大普奔!...
  14. vscode Markdown TOC 插件生成目录去除autoauto
  15. 查看电脑内存个数、主频(工作频率)、容量、位宽等的方法总结
  16. 用u盘重装微软官方win10专业版--详细操作文档
  17. KBL410-ASEMI整流桥KBL410
  18. android 自定义图片,Android自定义图片集合
  19. 完全卸载Myeclipse
  20. IDEA左侧的project目录中,看不到项目的文件结构图,项目目录不见了

热门文章

  1. PV操作经典例题——银行业务办理问题
  2. OpenCv创建读取,显示图片与灰度,透明图片,控制图片窗口大小
  3. 老年人自学计算机,老人学电脑入门教程 老人怎么学习电脑
  4. 如何理解ifconfig中的errors/dropped/fifo/frame统计指标
  5. 怎么sketch画板导出html,sketch符号和导出画板 – Sketch入门UI设计教程
  6. 安装程序无法更新计算机配置,无法安装某些更新或程序
  7. google autoaugment
  8. C++生成dll及dll的调用
  9. 小酌Django4——博客文章展示
  10. 漫画:什么是旅行商问题?