1. 简介

Dialog 是一个可以展示信息以及和用户交互的小窗体.

1.1 Dialog 的组成部分

Title 标题部分 : 这部分是可选的,只有当内容区域被使用了才可以使用这里.(并不是强制的)

Content 内容区域 : 显示信息的部分,可以使用自定义布局.

Action Buttons 交互按钮 : 最多三个按钮.(Positive,Negative, Neutral)

1.2 管理Dialog

使用DialogFragment来管理Dialog可以正确处理生命周期事件. 我们可以创建各种各样的Dialog,当然可以自定义UI.

2 分类

对于系统的原生的Dialog主要有下面几种 :

普通提示Dialog.

列表Dialog.

单选列表Dialog.

多选列表Dialog.

自定义ContentView Dialog.

自定义TitleView Dialog.

先看效果图

效果图

2.1 普通提示Dialog

实现代码

/**

* 普通提示Dialog.

*/

public static class NormalTextDialogFragment extends DialogFragment {

/**

* 创建Dialog时调用

*/

@NonNull

@Override

public Dialog onCreateDialog(Bundle savedInstanceState) {

Log.d(TAG, "onCreateDialog: ");

// 创建构造器

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

// 设置参数

builder.setMessage("普通提示Dialog信息")

.setPositiveButton("确定", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Log.d(TAG, "onClick: 确定 " + Thread.currentThread().getId());

Toast.makeText(getActivity(), "点击了确定", Toast.LENGTH_SHORT).show();

}

})

.setNegativeButton("取消", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Log.d(TAG, "onClick: 取消 " + Thread.currentThread().getId());

Toast.makeText(getActivity(), "点击了取消", Toast.LENGTH_SHORT).show();

}

});

// 创建对话框并返回.

return builder.create();

}

}

调用方式

// 创建类实例,调用 show() 方法就可以显示了.

new NormalTextDialogFragment().show(getSupportFragmentManager(), "normal_text_dialog");

2.2 列表Dialog

/**

* 列表Dialog

*/

public static class ListDialogFragment extends DialogFragment {

@NonNull

@Override

public Dialog onCreateDialog(Bundle savedInstanceState) {

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

return builder

.setTitle("颜色选择")

.setItems(R.array.color_arrays, new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

// 获取列表

String[] colors = getResources().getStringArray(R.array.color_arrays);

// 显示

Toast.makeText(getActivity(), "选择了 " + colors[which], Toast.LENGTH_SHORT).show();

}

})

.create();

}

}

2.3 单选Dialog

/**

* 单选框Dialog

*/

public static class SingleChoiceDialogFragment extends DialogFragment {

@NonNull

@Override

public Dialog onCreateDialog(Bundle savedInstanceState) {

return new AlertDialog.Builder(getActivity())

.setSingleChoiceItems(R.array.color_arrays, 0, new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

// 获取列表

String[] colors = getResources().getStringArray(R.array.color_arrays);

// 显示

Toast.makeText(getActivity(), "选择了 " + colors[which], Toast.LENGTH_SHORT).show();

}

})

.setPositiveButton("OK",null)

.setNegativeButton("Cancel", null)

.create();

}

}

2.4 多选Dialog

/**

* 多选项Dialog

*/

public static class MultiChoiceDialogFragment extends DialogFragment {

@NonNull

@Override

public Dialog onCreateDialog(Bundle savedInstanceState) {

return new AlertDialog.Builder(getActivity())

.setMultiChoiceItems(R.array.color_arrays, null, new DialogInterface.OnMultiChoiceClickListener() {

@Override

public void onClick(DialogInterface dialog, int which, boolean isChecked) {

// 获取列表

String[] colors = getResources().getStringArray(R.array.color_arrays);

// 显示

String txt = "点击了: " + colors[which] + " == " + isChecked;

Toast.makeText(getActivity(), txt, Toast.LENGTH_SHORT).show();

}

})

.setPositiveButton("OK", null)

.setNegativeButton("Cancel", null)

.create();

}

}

2.5 自定义ContentView

/**

* 自定义Content

*/

public static class CustomContentDialogFragment extends DialogFragment {

@NonNull

@Override

public Dialog onCreateDialog(Bundle savedInstanceState) {

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

return builder

.setView(R.layout.dialog_custom_content)

.setPositiveButton("OK" , null)

.setNegativeButton("Cancel", null)

.create();

}

}

2.6 自定义Title

/**

* 自定义标题Dialog

*/

public static class CustomTitleDialogFragment extends DialogFragment {

@NonNull

@Override

public Dialog onCreateDialog(Bundle savedInstanceState) {

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

LayoutInflater li = getActivity().getLayoutInflater();

return builder

.setCustomTitle(li.inflate(R.layout.dialog_custom_title, null))

.setPositiveButton("OK" , null)

.setNegativeButton("Cancel", null)

.create();

}

}

android dialog 结构,Android 原生Dialog实现相关推荐

  1. android simples 结构,android – 如何在simple_list_item_2中构造和显示信息?

    我从我的(测试)数据库中获取客户信息列表,我想显示它.客户由Customer类表示,包括姓名,信息和注释成员.它的toString方法只返回名称.我创建了仅使用simple_list_item_1布局 ...

  2. androidsdcard挂载目录_(Android系统目录结构)/mnt/sdcard 和 sdcard 的区别

    mnt/是Unix/Linux系统下外部设备的专用目录,Linux默认挂载外部设备都会挂载到这个目录;如将SD卡挂载后,会生成目录:/mnt/sdcard/. shell@aeon6735m_65c_ ...

  3. android 自定义dialog样式,Android 自定义dialog类

    首先定制style样式 styles.xml 加入自定义样式 @null true true true @color/transparent @color/transparent true 0.6 在 ...

  4. Android中修改弹出dialog背景无色透明,弹出时有遮罩

    先在styles.xml中写入下面样式 1 <style name="dialog" parent="@android:style/Theme.Dialog&quo ...

  5. android dialog 横向全屏,Dialog全屏,去掉状态栏的方式

    dialog即使设置全屏了,但还是有状态栏占用高度这: 直接将下面这行代码放到你的dialog中即可 @Override protected void onStart() { super.onStar ...

  6. android service中显示一个dialog

    转自:http://blog.csdn.net/huxueyan521/article/details/8954844 dialog是依附于activity存在的.但是app中经常需要使用以下的情况, ...

  7. android 自定义对话框 demo,自定义dialog对话框获取EditText数据demo

    效果: java代码 package com.example.dialogdemo; import android.app.Activity; import android.app.AlertDial ...

  8. android 8种对话框(Dialog)使用方法汇总

    本文为作者原创,转载请注明出处:http://www.cnblogs.com/gzdaijie/p/5222191.html 目录 1.写在前面 2.代码示例 2.1 普通Dialog(图1与图2) ...

  9. Android几秒后自动关闭dialog

    代码改变世界 Android几秒后自动关闭dialog AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());bu ...

最新文章

  1. 限时删!一套目标检测、卷积神经网络和OpenCV学习资料(教程/PPT/代码)
  2. 微服务、分布式、云架构构建电子商务平台
  3. python自动化办公 百度网盘-Python自动化办公实战教程2020最新带源码
  4. mfc指示灯报警显示_消防水炮需要外置声光报警吗
  5. java检查两个字符串是否包含,java判断一个字符串是否包含另外一个字符串,java另外一个,要检查一个字符串是否包含...
  6. python csdn博客_GitHub - 1783955902/CSDNBlogBackup: Python实现CSDN博客的完整备份
  7. cross validation交叉验证
  8. always on_Always On可用性组中的自动播种
  9. idea本地运行JavaWeb项目
  10. csdn下载频道资源整理
  11. 2019 CCF 推荐 会议 列表
  12. 如何为html代码加密
  13. sw转cad映射文件_SolidWorks工程图转CAD图纸DWG文件教程-很吊
  14. Amazon 新手要知道 100 个问题
  15. 进化算法的产生与发展
  16. 【算法】布赖恩·克尼根算法——天才算法求二进制中1的个数
  17. java好玩的项目github_GitHub 上有些什么好玩的项目?
  18. VM虚拟机故障安装不了虚拟网卡解决办法
  19. centos7 gam_server进程导致CPU使用率100%,系统负载很高
  20. Arduino人体红外感应+继电器

热门文章

  1. Google与Binomial合作开源Basis Universal GPU纹理编解码器
  2. 窥见C++11智能指针
  3. nginx 配置expires
  4. YOLO (You only look once) 实时目标检测
  5. Linux下用GDB调试程序崩溃错误
  6. 截取字符串,但要保证汉字不被截取半个
  7. 一致性协议raft详解(四):raft在工程实践中的优化
  8. python创建字符串数组_如何创建任意长度字符串的numpy数组?
  9. 循环首次适应算法_面向6G的极化编码链路自适应技术
  10. MySQLdump常用命令