首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

三句代码创建全屏Dialog或者DialogFragment:带你从源码角度实现全屏Dialog

其实View真正显示的点是在Activity resume的时候,让WMS添加View,其实是这里调用WindowManagerGlobal的addView,这里有个很关键的布局参数params,其实传就是...不设置Window.FEATURE_NO_TITLE 在上面的分析中我们知道,setContentView会进一步调用generateLayout创建根布局,Android系统默认实现了多种样式的根布局应...创建沉浸式全屏Dialog 在全屏Dialog的基础上,我们可以创建沉浸式Dialog,也就是让Dialog的内容区域延展到状态栏下方,由于这里用到了fitsystemwindow,所以要牵扯DecorView...及rootView的设置,在上面的基础上有两点需要处理,一是:内容区域延展上去;二是:状态栏变成透明(不透明你也看不见啊),如何延展内容区域,参考全屏、沉浸式、fitSystemWindow使用及原理分析...(不兼容5.0以下),主题中添加如下属性,设置状态栏颜色透明即可,当然,代码中也可实现。

4.2K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    setContentView的时候,到底发生了什么

    不管怎么说,当我们在Activity中调用setContentView的时候,其实内部调用了PhoneWindow的setContentView。...这里先总结下得到的信息: 一个Activity对应一个Window Window只有一个子类:PhoneWindow 在Activity中调用setContentView,其实就是调用Activity里面的...总结 所以整个setContentView内部做了如下事: 在Activity中调用setContentView(实际调用PhoneWindow#setContentView) 新建DecorView实例...设置界面主题(requestFeature) 确定主题界面(layoutResource = R.layout.xxx) 在主题界面抽取内容ViewGroup(mContentParent = findViewById...) 将我们自己创建的布局界面和Android提供的内容mContentParent打包进Scene 通过LayoutInflater解析布局,将布局转化为View 将view添加到mContentParent

    31930

    Android开发中遇到的requestFeature() must be called before adding content异常

    缘起     上一篇博文中讲到了几种实现全屏显示Activity内容的方法。然而实际在实现中发现了一些问题,在本篇博文中进行总结下。...因此想到,我们在排查Android运行时异常时是否也可以利用起try-catch这个工具呢?加起来就试试好了: ?      再次在模拟器中运行应用,可以在logcat中输出如下信息: ?      ...Android Studio 捕获异常方案二     这种方案是从网上看来的,利用了Therad的一个静态方法,首先定义一个Thread.UncaughtExceptionHandler的实例,然后在程序中设置为未捕获异常的默认处理器...看字面意思是,requestWindowFeature()方法必须在添加视图之前先调用。可是以前也是这么用的啊,也没见出现过这种异常。于是又搜索了一番才在StackOverflow上发现了解决方案。...AppCompatDelegate中的对应方法,即可为旧式Activity添加具备Material Design风格的视图组件。

    3K70

    Android应用界面开发——Fragment(实现图书详情界面)

    在Activity运行过程中,可调用FragmentManager的add()、remove()、replace()方法动态地添加、删除或替换Fragment。...Fragment与Activity通信 为了在Activity中显示Fragment,还必须将Fragment添加到Activity中。.../>元素的android:name属性指定Fragment的实现类。 在Java代码中通过FragmentTransaction对象的add()方法来添加Fragment。...在调用commit()之前,也可以调用addToBackStack()将事务添加到Back栈,该栈由Activity负责管理,这样允许用户按下Back键返回到前一个Fragment状态。...该方法只调用一次。 onDetach():将该Fragment从Activity中删除、替换完成时回调该方法,在onDestroy()方法后一定会回调onDatach()方法,该方法只会被调用一次。

    2.6K20

    AppCompatActivity.setContentView如何装载视图到AppCompatActivity上

    ---- 大概可以了解如下内容: a.AppCompatActivity中在onCreate中调用setContentView(R.layout.main)是做什么的,如何装载视图; b.PhoneWindow...是什么,与Window有什么关系; c.DecorView如何被创建的,与Window和其他视图是什么关系; d.在我们调用requestFeature的时候为什么要在setContentView之前?...} 1)在AppCompatActivity定义了setContentView 调用添加视图方法; //设置要显示视图的布局ID或者View @Override public...(subDecor) 我们在创建subDecor时候发现会调用requestWindowFeature(),然后mWindow.getDecorView()创建DecorView添加相应的特征(Feature...Activity中添加视图的流程如下 a.在Activity中调用setContentView();设置我们要显示的视图View或者视图ID Activity @Override protected

    49920

    Activity加载view6.0源码分析---setContentView

    会往windowmanage中添加该类的一个实例作为顶层view。...其中这两个步 骤中将view绑定到window是在启动activity时完成的操作,是将mDecor绑定到window。然后再往mDecor中添加各种view。...中的各种feature和flag的style对应的各种含义以及动画style在\android\android\frameworks\base\core\res\res\values\attrs.xml...文件中有注释说明 在menu键的设置中涉及到了版本问题,包括3.0,4.0和5.0分别有对应的不同处理,参考\android\android\frameworks\base\core\java\android...Activity在启动加载布局共有两个操作 创建DecorView的布局:setContentView的流程基本是用来创建DecorView的布局 将布局添加到window窗口:在Activity的启动过程中

    84480

    Carson带你学Android:这是一份详细 & 全面的Fragment学习攻略

    定义 Activity界面中的一部分,可理解为模块化的Activity Fragment不能独立存在,必须嵌入到Activity中 Fragment具有自己的生命周期,接收它自己的事件,并可以在Activity...作用 支持动态、灵活的界面设计 Fragment从 Android 3.0后引入 在低版本Android 3.0前使用 Fragment,需要采用android-support-v4.jar兼容包 3....的layout.xml布局文件中静态添加 在Activity的.java文件中动态添加 方法1:在Activity的layout.xml布局文件中静态添加 Activity的布局文件 fragment_layout_test.xml...Android 3.0前,Activity需FragmentActivity(其也继承自Activity),同时需要导入android-support-v4.jar兼容包,这样在Activity中才能嵌入...方法2:在Activity的.java文件中动态添加 步骤1:在Activity的布局文件定义1占位符(FrameLayout) 这样做的好处是:可动态在Activity中添加不同的 Fragment

    37820

    Android之View的诞生之谜

    我们接着看 getWindow().setContentView(layoutResID); 在渲染我们的布局文件前,先调用了installDecor()来初始化mContentParent,之前也说mContentParent...我们来一探究竟,我们看 mContentParent = generateLayout(mDecor)的源码: 小小的发现:从上面的代码我们可以解释很多开发中的技巧,看下面的代码,在加载我们的资源文件前...如下图: 小结:调用setContentView方法,实例化了DecorView, DecorView有两个子布局,一个是加载顶部状态栏的,一个是加载我们的内容布局的,activity添加的xml就是内容布局的一个字元素...作为绘制view的入口,我们来看下requestLayout方法 ViewRootImpl.scheduleTraversals()调用后,系统会发起一个异步消息,然后在异步消息执行过程中调用performTraversals...总结 通过上面内容,我们学到了一些小技巧,如移除状态栏的一些步骤,之前我们可能知道,嗯,是的,要在setContentView前调用requestFeature才可以,通过这次分析,我们之前可能是知道要这样子做才行

    40330

    Android--MaterialDesign动画之转场动画(Activity transitions)

    我在上面效果中做了两个操作,点击小的图片,跳转到另一个Activity,然后按了后退键返回上一个Activity,接下来介绍使用方法 首先我们需要开启支持转场动画,有两种方式 1.在Activity的OnCreate...方法中,在setContentView之前调用 getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); 2.在style的AppTheme...name="android:windowSharedElementExitTransition">@transition/enter 2.在代码中设置自定义共享元素转场动画 @Override...4.除了元素共享外,还可以使用内容过渡动画 首先开启支持内容过渡动画,两种方式 1.主题中新增 android:windowContentTransitions"...>true 2.代码调用 getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); 指定过渡动画,两种方式

    1.6K30

    Android入门教程 | Fragment 基础概念

    片段必须始终托管在 Activity 中,其生命周期直接受宿主 Activity 生命周期的影响。...可复用,页面布局可以使用多个Fragment,不同的控件和内容可以分布在不同的Fragment上。 使用Fragment,可以少用一些Activity。...然后,如要将事务应用到 Activity,必须调用 commit()。 不过,在调用 commit() 之前,可能希望调用 addToBackStack(),以将事务添加到片段事务返回栈。...如果向事务添加多个更改(如又一个 add() 或 remove()),并调用 addToBackStack(),则调用 commit() 前应用的所有更改都将作为单一事务添加到返回栈,并且返回按钮会将它们一并撤消...向 FragmentTransaction 添加更改的顺序无关紧要,不过: 必须最后调用 commit()。 如果要向同一容器添加多个片段,则添加片段的顺序将决定它们在视图层次结构中出现的顺序。

    3.5K40

    之解析练习RadioButton+Fragment+viewpager布局架构

    适配器有责任从容器中删除这个视图。这是为了确保 在finishUpdate(viewGroup)返回时视图能够被移除。...instantiateItem( ): ①将给定位置的view添加到ViewGroup(容器)中,创建并显示出来 ②返回一个代表新增页面的Object(key),通常都是直接返回view本身就可以了,...- android.widget.RadioGroup RadioGroup提供的只是RadioButton单选按钮的容器,我们可以在该容器中添加多个RadioButton方可使用,要设置单选按钮的内容...按钮组件的使用类似,区别在于定义的RadioButton组件必须放在RadioGroup组件中。...listener)注册一个当子内容添加到该视图或者从该视图中移除时所要调用的回调函数 listener 当层次结构发生改变时所要调用的回调函数 ---- 三.使用效果 ?

    1.3K40
    领券