2016 - 2024

感恩一路有你

android标题菜单 android getDecorView()的作用?

浏览量:4459 时间:2023-05-18 10:36:57 作者:采采

android getDecorView()的作用?

decorView是window中的最顶层view,也可以从window中按照getDecorView查看到decorView。是从decorView资源到程序会显示的区域,包括标题栏,但不包括状态栏。借用这个可以计算状态栏高度。诸如计算状态栏的高度:RectframenewRect();getWindow().getDecorView().getWindowVisibleDisplayFrame(frames);intstatusBarHeight;RectframenewRect();getWindow().getDecorView().getWindowVisibleDisplayFrame(frames);intstatusBarHeight

Android端Chrome 72正式版改进了哪些内容?

Chrome72afterAndroid并没有在您正准备播放视频和音频等媒体内容的网站的媒体通知中显示网页标题,域名或插图。况且,默认情况下,媒体控件也会隐藏在隐身模式中,用户只能在用播放/暂停按钮。

Android Studio中自定义标题栏的添加问题?

mainifests中设置中:android:/AppTheme(即默认设置).⒉values-styles.xml中系统设置:stylenameAppThemeparent.二values-styles.xml中:在当先在用的style的parent属性先添加NoActionBar.如以前为stylenameAppThemeparent.

has leaked window 怎么解决?

我想大多数人,是对这3个东西的概念能区分,但是具体看区别在哪却很不好说啊出。我这里依据什么我个人的理解来讲讲我个人对这3个概念的理解。肯定这里怎么设计到通用的事件窗口模型等通用GUI啊,设计,我这里就不不打算讲了,并非是从概念上来通过区分。Activity是Android应用程序的载体,允许用户在其上创建一个用户界面,并需要提供用户处理事件的API,如onKeyEvent,onTouchEvent等。并维护应用程序的生命周期(由于android应用程序的运行环境和其他操作系统不同,android的应用程序是运行在框架之内,因为他的应用程序肯定不能当当从进程的级别去确定,而许多是从概念上去判断。android应用程序是由多个活动堆积而成,而各个活动又有其的的的生命周期)。Activity本身是个庞然的载体,可以再理解成是应用程序的载体,如果木有Activity,android应用将不能正常运行。也也可以表述成android应用程序的入口。Acivity的实例对象由升级维护。系统服务ActivityManager负责维护Activity的实例对象,并参照运行状态以维护其状态信息。但在用户级别,程序员很有可能根愿意去理解蓝月帝国一个界面的载体。但并不是个载体,它本身并不全权负责任何绘制图。Activity的内部基于,只不过是聚了一个Window对象。Window是一个抽象类,它的具体是在android_src_home/framework/policies/base/phone/com/android/internal/policy/impl目录下的。当我们全局函数Acitivity的setContentView方法的时候虽然是动态链接库的Window对象的setContentView方法,所以才我们更说明Activity中跪求界面的手工绘制事实上全是交给Window对象来做的。草图类图的话,可以看出Activity凝合了一个Window对象。下面是PhoneWindow中的setContentView方法的实现:@OverrideprivatevoidsetContentView(Viewview,params){if(mContentParentnull){installDecor()}catch{()}(view,params)mainCallbackcbgetCallback()if(cb!null){cb.onContentChanged()}}Window内部必须可以确定mContentParent是否为空,然后内部函数installDecor方法(安装装饰器),我们去看看这个方法如何能基于的privatevoidinstallDecor(){if(mDecornull){mDecorgenerateDecor()(true)}if(mContentParentnull){mContentParentgenerateLayout(mDecor)mTitleView(TextView)findViewById()if(mTitleView!null){if((getLocalFeatures()amp(1ltltFEATURE_no_TITLE))!0){ViewtitleContainerfindViewById(_container)if(titleContainer!null){(View.GONE)}catch{(View.GONE)}if(mContentParent instanceof FrameLayout){((FrameLayout)mContentParent).setForeground(null)}}else{(mTitle)}}}}在该方法中,是需要创建战队一个DecorView,DecorView是一个扩张FrameLayout的类,是所有窗口的根View。我们在Activity中全局函数的setConctentView是放到DecorView中了。这是我们类图的吸聚关系::Activity---gtWindow---gtDecorView这是我们得出的结论这3个类之间好的一个关系。我们详细点总结一下,类对象是要如何被创建的。先不考虑到Activity的创建(而且Acitivity的实例由ActivityManager维护,是在另一个进程设计什么到IPC的通信,后面会有讲),而考虑到Window和View的创建角色。Activity被创建家族后,系统会内部函数它的attach方法来将Activity再添加到ActivityThread当中。我们不能找到Activity的attach方法追加:specialvoidattach(Contextcontext,ActivityThread aThread,Instrumentation instr,IBindertoken,intident,Application application,Intent intent,ActivityInfo info,CharSequence title,Activity parent,String id,Object lastNonConfigurationInstance,HashMapltString,Objectgt lastNonConfigurationChildInstances,Configuration config){attachBaseContext(context)mWindow(this)(this)if(!_INPUT_STATE_UNSPECIFIED){()}mUiThread()mMainThreadaThreadmInstrumentationinstrmTokentokenmIdentidentmApplicationapplicationmIntentintentmComponent()mActivityInfoinfomTitletitlemParentparentmEmbeddedIDidmLastNonConfigurationInstancelastNonConfigurationInstancemLastNonConfigurationChildInstanceslastNonConfigurationChildInstances(null,mToken,mComponent.flattenToString())if(mParent!null){(())}mWindowManager()mCurrentConfigconfig}我们看红色的代码部分,应该是创建角色Window对象的代码。感兴趣同学是可以跟踪去去看看具体一点是怎么创建的。其实很简单,其内部实现方法动态创建了Policy对象的makeNewWindow方法,其方法再new了一个PhoneWindow对象万分感谢:publicPhoneWindowmakeNewWindow(Contextcontext){returnnewPhoneWindow(context)}这时我们也这个可以把流程串下来,Activity创建角色后系统会动态链接库其attach方法,将其再添加到ActivityThread当中,在attach方法中修改了一个window对象。下面结论View的创建。我们知道Window聚合了DocerView,当用户调用setContentView的时候会把一颗View树仍给树是也创建家族好的实例对象了,所以我们研究的是DocerView是个什么东西,它是该如何被创建的。我们转头去看看Window实现程序里边的setContentView方法,我们看上面代码的蓝色的部分setContentView-rlminstallDec同问真接next了一个DecorView对象:protectedDecorViewgenerateDecor(){returnnextDecorView(getContext(),-1)}我们可以去去看看DecorView的实现,它是PhoneWindow的一个内部类。实现方法很简单啊,它设置成会中有一个灰色的标题栏,后再在标题栏下边会包含一个空白区域区域用处当用户调用setContentView的时候不宜放置用户View,并传达事件,这里不做具体一点分析,感兴趣同学也可以自己研究去研究。当DecorView创建角色好之后再返回到Window中的setContentView方法中来,见上面代码紫色部分,全局函数(view,params)来将用户的View树去添加到DecorView中。到这时为止,我想我们早就很清晰的见过到它们3者之间的关系,并明白了其创建流程。现在归纳一下:Activity在onCreate之前动态创建attach方法,在attach方法中会修改window对象。window对象修改时并木有创建家族Decor对象对象。用户在Activity中动态链接库setContentView,然后把全局函数window的setContentView,这时会检查一下DecorView是否必然,如果不修真者的存在则创建家族DecorView对象,然后把用户自己的View先添加到DecorView中。

对象 方法 Activity 用户 null

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。