Dialog与FragmentDialog源码解析

本文深入探讨了Android中的Dialog和DialogFragment。从源码层面解析了Dialog的构造方法、显示与隐藏机制,以及DialogFragment如何继承和重写Fragment。重点介绍了Dialog的Builder模式,提供了一种构建复杂对象的简便方式。
摘要由CSDN通过智能技术生成

《代码里的世界》UI篇

用文字札记描绘自己 android学习之路

转载请保留出处 by Qiao
http://blog.csdn.net/qiaoidea/article/details/46402845

【导航】
- 弹出式对话框各种方案 从仿QQ消息提示框来谈弹出式对话框的实现方式 (Dialog,PopupWind,自定义View,Activity,FragmentDialog)
- Dialog源码解析 从源码上看Dialog与DialogFragment


1.概述

  前一篇写了常用的弹出框的几种实现方式,这里通过源码来简要解析下Dialog的实现原理。后便作为补充会讲下官方提倡的FragmentDialog。


2.源码解析

  通常创建非阻塞式对话框的方式就是使用dialog了,不过在Android 3.0 之后,google更推荐使用新引入的基于Fragment的DialogFragment。这里我们从源码层次来看下详细实现。

2.1 Dialog

1.DialogInterface

  Dialog对话框实现的接口有DialogInterface,Window.Callback, keyEvent.Callback,OnCreateContextMenuListener,后边几个基本的Activity、View等组件都或多或少实现了,这里侧重讲下Dialog专有的DialogInterface。

public interface DialogInterface {
    
    public static final int BUTTON_POSITIVE = -1;
    public static final int BUTTON_NEGATIVE = -2;
    public static final int BUTTON_NEUTRAL = -3;

    @Deprecated
    public static final int BUTTON1 = BUTTON_POSITIVE;
    @Deprecated
    public static final int BUTTON2 = BUTTON_NEGATIVE;
    @Deprecated
    public static final int BUTTON3 = BUTTON_NEUTRAL;

    public void cancel();
    public void dismiss();

    interface OnCancelListener {
        public void onCancel(DialogInterface dialog);
    }

    interface OnDismissListener {
        public void onDismiss(DialogInterface dialog);
    }

    interface OnShowListener {
        public void onShow(DialogInterface dialog);
    }

    interface OnClickListener {
        public void onClick(DialogInterface dialog, int which);
    }

    interface OnMultiChoiceClickListener {
        public void onClick(DialogInterface dialog, int which, boolean isChecked);
    }

    interface OnKeyListener {
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event);
    }
}

  比较简单易懂,没什么要说的,定义了最基本的接口方法,一目了然。具体设置和使用都在在Dialog中详细实现。

2.Dialog全局变量

  同样比较清晰容易理解,不过多解释。

    private static final String TAG = "Dialog";
    private Activity mOwnerActivity;//关联和创建它的activity

    final Context mContext;
    final WindowManager mWindowManager;
    Window mWindow;
    View mDecor;
    private ActionBarImpl mActionBar;

    protected boolean mCancelable = true;

    private String mCancelAndDismissTaken;
    private Message mCancelMessage;//取消指令
    private Message mDismissMessage;//消失指令
    private Message mShowMessage;//显示指令

    private OnKeyListener mOnKeyListener;//点击事件

    private boolean mCreated = false;
    private boolean mShowing = false;
    private boolean mCanceled = false;

    private final Handler mHandler = new Handler();

    private static final int DISMISS = 0x43;
    private static final int CANCEL = 0x44;
    private static final int SHOW = 0x45;

    private Handler mListenersHandler;//消息指令接受处理handler

    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值