为什么80%的码农都做不了架构师?>>>   

AlertDialog是用来和用户交流互动的很好的工具,善用之可以为应用程序增色。有人认为它简单”不就一个对话框么“,我觉得技术是需要严谨甚至谦卑。手机屏幕是个寸土必争之地,那么既然点进来看此文了,说明还是对AlertDialog想了解更多的好学人士。文本的目标:不想搜索”Android AlertDialog“!

先来看一个最简单的AlertDialog:

其实,我觉得这个最基本的AlertDialog已经足够好看的了。下面是实现代码:

/** AlertDialog.Builder 是用来创建AlertDialog的 */AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder//给builder set各种属性值.setIcon(R.drawable.blink)//继续set.setMessage(getString(R.string.alert_dialog_message)).setPositiveButton("确定退出", new OnClickListener() {//确定按钮@Overridepublic void onClick(DialogInterface dialog, int which) {MainActivity.this.finish();System.exit(0);}}).setNegativeButton("我按错了", new OnClickListener() {//取消按钮@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}}).show();//显示AlertDialog

这里,也许会奇怪,为什么没有直接见到AlertDialog呢?而是用了一个Builder,set了一些值之后直接.show()就出来了?

如果有这么浓厚的好奇心,还是要看一下AlertDialog的源码:

1
public class AlertDialog extends Dialog implements DialogInterface

首先AlertDialog继承自Dialog实现了DialogInterface接口,那么使用的时候也可以考虑用一下Dialog的函数。

1
protected AlertDialog(Context context)

构造方法都是用protected来修饰的,说明我们没有办法直接new AlertDialog(),Google给我们提供了一个AlertDialog的内部类AlertDialog.Builder来实现:

1
public static class Builder

很欣喜的看到public修饰符了,这也就是上文使用AlertDialog.Builder的原因。

对于AlertDialog.Builder的理解,从字面上看出,它是用来构建AlertDialog的,可以概括一下,它是为AlertDialog做一些准备工作的。下面我们来看看AlertDialog对象的使用,还是先看效果,这才有兴趣往下看呐:

代码只是略加改动,体现了AlertDialog对象的作用:

/** AlertDialog.Builder 是用来创建AlertDialog的 */AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);AlertDialog alertDialog =builder//给builder set各种属性值.setIcon(R.drawable.blink)//继续set.setTitle(getString(R.string.alert_dialog_message)).setMessage(getString(R.string.alert_dialog_message)).setPositiveButton("确定退出", new OnClickListener() {//确定按钮@Overridepublic void onClick(DialogInterface dialog, int which) {MainActivity.this.finish();System.exit(0);}}).setNegativeButton("我按错了", new OnClickListener() {//取消按钮@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}}).create();//创建AlertDialog对象alertDialog.setMessage("AlertDialog对象:\n\t\t" + getString(R.string.alert_dialog_message));alertDialog.show();

自定义AlertDialog,我觉得效果还不如默认的好:

布局文件alert_dialog_custom.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="match_parent"android:orientation="horizontal" ><TextViewandroid:id="@+id/alert_dialog_message"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/alert_dialog_message"android:drawableLeft="@drawable/blink"android:gravity="center_vertical"/><Buttonandroid:id="@+id/alert_dialog_btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/more"android:text="@string/alert_dialog_btn"/>
</LinearLayout>

使用自定义布局很简单:

builder.setView(LayoutInflater.from(MainActivity.this).inflate(R.layout.alert_dialog_custom, null));

AlertDialog.Builder提供了setView的方法来使用自定义布局。

AlertDialog.Builder的setView方法是在AlertDialog的Message下面提供了一个自定义布局的空间,并不能改变整个AlertDialog的风格。下面请看改变整体风格的AlertDialog:

布局文件可以自己任意发挥,主要还是看:

AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();//Builder直接create成AlertDialogalertDialog.show();//AlertDialog先得show出来,才能得到其WindowWindow window = alertDialog.getWindow();//得到AlertDialog的Windowwindow.setContentView(R.layout.alert_dialog_custom);//给Window设置自定义布局View layout = LayoutInflater.from(MainActivity.this).inflate(R.layout.alert_dialog_custom, null);//从xml中inflate过来TextView dialogMsg = (TextView) window.findViewById(R.id.alert_dialog_message);//从Window中findViewdialogMsg.setOnClickListener(new View.OnClickListener() {//设置监听@Overridepublic void onClick(View v) {MainActivity.this.finish();System.exit(0);}});

转载于:https://my.oschina.net/lichen/blog/136606

Android AlertDialog的一切相关推荐

  1. Android AlertDialog 对话框开启和关闭输入法问题

    Android AlertDialog 对话框开启和关闭输入法问题 AlertDialog 对话框是android jar包自带的对话框,说实话 真的很丑,黑白相间,不是很推荐使用.大多时候 特别是项 ...

  2. 一对一视频聊天软件源码,Android AlertDialog 对话框

    一对一视频聊天软件源码,Android AlertDialog 对话框实现的相关代码 button = (Button) findViewById(R.id.button_alertDialog);b ...

  3. Android AlertDialog设置宽度显示不正常的问题

    学而时习之温故而知新 礼拜天写一个dialog 出现了设置的宽度和布局写的宽度明现不一致问题, 出现了这种问题再代码中设置宽和高问题就解决了 一般写AlertDialog 2种方法,这里都 给出来 , ...

  4. [Android] AlertDialog获取网上天气并显示各城市天气

    最近帮同学做android百度地图,其中涉及到定位城市天气功能.才知道自己技术非常的一般,还有很多东西需要学习,同时需要回归到我研究生的方向--数据挖掘.同时又见识到了一位叫柳峰的大神,推荐大家去看看 ...

  5. android AlertDialog.Builder

    AlertDialog的构造方法全部是Protected的,所以不能直接通过new一个AlertDialog来创建出一个AlertDialog. 要创建一个AlertDialog,就要用到AlertD ...

  6. Android AlertDialog学习

    1. 有两个按钮的对话框 Builder builder=new AlertDialog.Builder(AlertDialogActivity.this); builder.setIcon(andr ...

  7. android 对话框 图片,android – AlertDialog按钮的图像

    由于不推荐使用onPrepareDialog,因此您可以使用onShowListener. 你也应该设置Drawable边界,或者它将被放置在最左边. 下面的代码输出 public class MyD ...

  8. 【转】Android AlertDialog自定义布局

    原文网址:https://blog.csdn.net/u010694658/article/details/53022294 由于开发中经常使用弹框,然而系统自带的弹框太局限,也不太美观,经常不能满足 ...

  9. Android AlertDialog对话框自定义风格的另类实现

    一.引子 学过Android的同学都知道,对话框的重要程度非常高,任何一款 app几乎都离不开对话框,值得庆幸的是,对话框的运用在Android中还是相对比较容易的.虽然很简单,但我在项目中还是碰到些 ...

  10. Android AlertDialog框架(能自用改变字体颜色)

    这个AlertDialog框架能够自由改变字体颜色,这个很关键,因为AlertDialog按钮字体的颜色是根据style.xml之中colorAccent属性的值来定的,以至于可能字体颜色是白色,或者 ...

最新文章

  1. 从0开始搭建编程框架——插件
  2. Spring Security 实战干货:OAuth2授权回调的核心认证流程
  3. 【NLP】图解GPT-2(完整版)
  4. 《四世同堂》金句摘抄(十八)
  5. monkey自动化测试移动app 操作指南——真机 安卓(Android)app测试
  6. 互联网日报 | 6月7日 星期一 | 华为已捐献鸿蒙全部基础能力;芝麻信用7年免押金4000亿;奈雪的茶通过港交所上市聆讯...
  7. html新增的选择器,HTML5新增的选择器
  8. Linux 内核 cgroups 新漏洞可导致攻击者逃逸容器
  9. IE下,拖动grid的分隔栏,报getBoundingClientRect错误解决办法
  10. 2022-2028全球与中国智能家居安防系统市场现状及未来发展趋势
  11. HAL库控制PS2手柄
  12. 推荐5个免费的项目管理工具
  13. 压缩包密码破解工具-ARCHPR
  14. 微信第三方平台对接小程序发版
  15. 逻辑学学习.14 --- 谓词逻辑(六):数量量词和摹状词
  16. 金融私有云基础架构方案评估(架构与存储篇)
  17. Java实现 蓝桥杯 算法提高 天天向上(DP)
  18. 浅谈在windows系统下esp8266和esp32开发共存一个eclipse编译器,非安信可一体化环境,而是搭建自己的eclipes环境。
  19. 用AI进行工业质检的方案详解!
  20. 2022高处安装、维护、拆除考试题库及模拟考试

热门文章

  1. Create umbraco website-On the road of umbraco (1)
  2. mysql中locate和substring函数使用
  3. 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件。报错...
  4. 2017/4/27 morning
  5. NVIDIA TK1 刷机记录(1)ubuntu 14.04
  6. Learning Python 012 函数式编程 1 高阶函数
  7. 第八周 4.18 --- 4.24
  8. .net中Windows窗体间的数据交互
  9. Python学习教程:爬虫分析了京东内衣销售记录,哪个size最多?
  10. 设计模式之组合模式——Java语言描述