首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【PageLayout】非常简单的一键切换加载-空数据-错误页,支持自定义

    Android里面的AlertDialog一样,通过Builder去构建一个PageLayout。...一个Activity是通过ActivityThread创建出来的,创建完毕后,会将DecorView添加到Window中,同时会创建ViewRootImpl对象,并将ViewRootImpl对象和DecorView...,Window才是真正的显示视图。...再来看上面的那张图,可以说DecorView是一个界面的真正跟布局,TitleView我们可以通过设置theme样式显示隐藏的,状态布局切换时我们不考虑TitleView,我们只需要考虑ContentView...里写的话,你可以进行改造,也挺简单,目前没提供xml方式,PageLayout的初衷就是模仿AlertDialog方式,随时随地使用状态布局切换 你也可以在BaseActivity和BaseFragment

    76830

    Builder设计模式和AlertDialog的源码分析

    ,取值为Builder对象中对应的值 Android源码中Builder模式实现 在Android源码中,最常用到的Builder模式就是AlertDialog.Builder,使用该Builder...在调用Builder的creat函数时会创建AlertDialog,并且将Builder成员变量中P的参数应用到AlertDialog的mAlert对象中,即P.apply(dialog.mAlert)...在调用了builder 的show方法之后。里面在调用具体dialog的show方法显示弹窗。 那么AlertDialog在建造者模式中担任的是指挥者,Bilder就是具体的建造者。...比如我调用了两次setTitle(),在缓存时后一次会覆盖前一次,这样就解决了开发者冲动调用的问题。最后不论是调用Builder的show方法,还是调用调用AlertDialog的show方法。...函数 (2)然后调用AlertDialog的onStart函数 (3)最后将Dialog的DecorView的添加到WindowManager中 那么建造者模式就到这儿了

    38110

    【云+社区年度征文】探究 | 如何捕获一个 Activity页面上所有的点击行为

    这就要从事件分发机制说起了,点击屏幕首先响应的是当前屏幕的顶层View,也就是DecorView,在Activity中也就是Window的根布局。...而我们在第二步Acitivity中就无法获取Dialog的点击事件了,很明显是DecorView就没把事件传过来,难道Dialog的DecorView和Activity的DecorView不是同一个?...因为Dialog创建过程中需要使用Activity的Context,即需要使用Activity的token用来创建window。...因此我们得知,Dialog和Activity但是所处的Window不一样,也就是所在的父View——DecorView也是不一样的,所以在Dialog出现之后,点击屏幕上的按钮,是从Dialog自己的DecorView...onClick(v) } } 2)然后选择hook点,我们之前在《线程与更新UI》文章中说过,Activity的DecorView被完整绘制出来是在onResume之后,所以我们就在这里进行hook

    1.1K90

    Handler的初级、中级、高级问法,你都掌握了吗?

    是Android中的窗口,每个Activity和Dialog,Toast分别对应一个具体的Window,Window是一个抽象的概念,每一个Window都对应着一个View和一个ViewRootImpl...showDialog方法,先调用alertDialog.show()方法,再调用alertDialog.hide()方法,hide方法只是将Dialog隐藏,并没有做其他任何操作(没有移除Window)...主线程的Looper何时退出 在App退出时,ActivityThread中的mH(Handler)收到消息后,执行退出。...这样做的原因可能就是为了尽可能保证上层 app 在接收到屏幕刷新信号时,可以在第一时间执行遍历绘制 View 树的工作。...每个Activity的根布局都是DecorView,而DecorView的parent又是ViewRootImpl,所以在子View里执行invalidate()之类的工作,循环找parent,最后都会找到

    1.2K40

    竟如此简单,一文看懂DecorView的一生

    简介 DecorView的主要角色是作为顶层容器,承载着应用的视图结构。当在应用中使用setContentView方法加载布局时,实际上是将这个布局作为子视图添加到DecorView中。...在Android中,Window和View通过WindowManager服务来管理,WindowManager负责将Window(及其包含的DecorView)放置到屏幕上的正确位置。...在Activity的生命周期中,当调用setContentView方法时,系统就会开始构建视图层次结构,将指定的布局文件加载到当前Activity的Window所关联的DecorView中。...中,会初始化DecorView,但它的触发逻辑是在调用setContentView的时候 初始化DecorView 当Activity启动时,在onCreate方法中通常会调用setContentView...在上面将DecorView添加到WindowManager中时,内部是交由WindowManagerGlobal的addView处理,在该方法中会创建ViewRootImpl对象。

    57510

    我奶奶都能懂的UI绘制流程(上)

    当mDecor为空时generateDecor()会直接新建一个DecorView对象并将其返回,注意,DecorView本质上就是一个FrameLayout。...在我们写布局的时候,会使用标签来引入某个布局,标签的作用就体现在此,因为父布局已经存在一个ViewGroup了,所以使用时,子布局可以不写最外层的ViewGroup...AppComPatActivity 文章前面已经将Activity的setContentView()介绍完毕了,但是现在使用AndroidStudio开发时,咱们默认的Activity是谁?...这也就是为什么在使用AppCompatActivity时,主题必须设置为AppCompat类型,否则就会抛出异常。...的结尾开始,上回说到,在ActivityThread中调用了handleLaunchActivity()开始真正启动一个活动,今天咱们就来仔细分析下这个方法。

    1.1K60

    如何判断 Activity 上是否有弹窗

    Android 目前的弹窗有如下几种: 普通的应用窗口,如 Dialog 附加与普通窗口的子窗口,如 PopWindow 系统窗口,如 WindowManager type 在 FIRST_SYSTEM_WINDOW...与 LAST_SYSTEM_WINDOW 之间 通过图来简单来了解下 Window 和 View 的关系: Activity 在 attach 阶段创建了 PhoneWindow,并将 AppToken...在 onResume 阶段时,从 PhoneWindow 中获取 WindowManager 来 addView Dialog 有自己的 PhoneWindow,但 Dialog 并没有从 PhoneWindow...方案二:通过 AppToken 来判断 在文章开头的概念中,我们了解到,PopWindow、Dialog 使用的都是 Activity 的 WindowManager,并且,该WindowManager...在初次创建时,构造函数传入的 parentWindow 为 PhoneWindow,这个 parentWindow 很重要,因为在 WindowManagerGlobal 的 addView 方法中,

    3.3K20

    事件是如何到达activity的?

    了解window机制的一个重要原因是:事件分发并不是由Activity驱动的,而是由系统服务驱动viewRootImpl来进行分发 ,甚至可以说,在框架层角度,和Activity没有任何关系。...我们都知道的是,在我们手指触摸屏幕时,即产生了触摸信息。这个触摸信息由屏幕这个硬件产生,被系统底层驱动获取,交给Android的输入系统服务:InputManagerService,也就是IMS。...当viewRootImpl接收到触摸信息时,也正是应用程序进程事件分发的开始。 viewRootImpl是如何分发事件的?...Activity实现了Window.CallBack接口,并在创建布局的时候,把自己设置给了DecorView,因此在Activity的布局界面中,DecorView会把事件分发给Activity进行处理...而如果没有使用DecorView作为模板的窗口,流程就会和上述不一致了,例如PopupWindow: PopupWindow PopupWindow他的根View是 PopupDecorView ,而不是

    66510

    Android模拟面试,解锁大厂——从Activity创建到View呈现中间发生了什么?

    还有少数人会提到DecorView和ViewRootImp的作用。但是,当我继续追问关于Window的内容时,几乎没有人回答上来。...例如:在attach时创建Window对象、onResume后通知WindowManager添加view。 Window:Window是一个窗口,它是View的容器。...启动Activity时会创建一个Window,显示Dialog时也会创建一Window。因此Activity内部可以有多个Window。...把View树的管理工作封装到Window后,在调用Dialog.show()、Dialog.hide()等Window切换时,Activity只需要负责Window的显示和隐藏即可。...更新视图时,线程检查是在ViewRootImpl的checkThread()中。ViewRootImpl的初始化是在Activity的onResume()方法之后。

    81030

    android设置对话框背景透明度和弹出位置

    在android中我们经常会用AlertDialog来显示对话框。通过这个对话框是显示在屏幕中心的。但在某些程序中,要求对话框可以显 示在不同的位置。例如,屏幕的上方或下方。要实现这种效果。...就需要获得对话框的Window对象,获得这个Window对象有多种方法。最容易的就是直接 通过AlertDialog类的getWindow方法来获得Window对象。...(); 3 Window window = alertDialog.getWindow(); 4 window.setGravity(Gravity.TOP);   //window.setGravity...Window window = alertDialog.getWindow(); 5 7....alertDialog.show(); 我们在使用某些应用时会发现当弹出对话框或某些模式窗口时,后面的内容会变得模糊或不清楚。实际上,这些效果也很容易在OPhone中实现。

    2.4K60

    Android 通过DecorView计算statusBar、navigationBar的高度

    背景 近期在做项目的时候碰到了底部虚拟按键在各个厂商适配的问题,闷逼了一圈,后面搜索一圈,发现即使各大厂商有变动,还是离不开原生本质 正题 我们都知道activity >> window >> decorView...,适配的问题,闷逼了一圈,后面搜索一圈,发现即使各大厂商有变动,还是离不开原生本质 activity 的 decorview 我们都知道activity >> window >> decorView,Window...Window是一个抽象类,实际在Activity中持有的是其子类PhoneWindow。...计算statusBar和NavigationBar的高度 public class DecorUtil { /** * 请勿在dialog中使用 * *...window) { final View decorView = window.getDecorView(); int measuredHeight = decorView.getMeasuredHeight

    1.9K40
    领券