Android DecorView浅析

转载 2013年12月04日 18:53:47

Android DecorView浅析

Posted on 2012-07-13 10:26 曙光城邦 阅读(2430) 评论(0编辑 收藏

一、DecorView为整个Window界面的最顶层View。

二、DecorView只有一个子元素为LinearLayout。代表整个Window界面,包含通知栏,标题栏,内容显示栏三块区域。

三、LinearLayout里有两个FrameLayout子元素。

  (20)为标题栏显示界面。只有一个TextView显示应用的名称。也可以自定义标题栏,载入后的自定义标题栏View将加入FrameLayout中。

  (21)为内容栏显示界面。就是setContentView()方法载入的布局界面,加入其中。

工具查看:

1.

下图为SDK中tools文件夹下hierarchyviewer bat 查看ViewTree的结果:

(此时未替换标题栏)

 

2.替换标题栏后ViewTree的变化:

绿色区域发生了变化,改变为了载入的title.xml文件的布局。

title.xml内容为:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <ImageView 
    android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:src="@drawable/icon2"/>
  <TextView
      android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:id="@+id/title_tv"
  android:textColor="#FFFFFF"
  android:textStyle="bold"
  android:text="@string/app_name"
  />
</LinearLayout>

 

通知栏绘制在1号LinearLayout中,还是绘制在DecorView中还有待探究。

-----------------

ApiDemo中app包下CustomTitle中自定义TitleBar代码段

        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.custom_title);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1);

 

载入自定义titleBar后如何查找其中元素呢,其实还是findViewById就可以了,因为载入的自定义布局已经在DecorView树中了

而findViewById是怎么回事呢。

activity中findViewById源码

    public View findViewById(int id) {
        return getWindow().findViewById(id);
    }

调用了getWindow().findViewById,getWindow返回的是Window点入查看window中源码

    public View findViewById(int id) {
        return getDecorView().findViewById(id);
    }

所以最终是从DecorView最顶层开始搜索的。

相关文章推荐

Android DecorView浅析

一、DecorView为整个Window界面的最顶层View。 二、DecorView只有一个子元素为LinearLayout。代表整个Window界面,包含通知栏,标题栏,内容显示栏三块区域。...

android DecorView 浅析

一、DecorView为整个Window界面的最顶层View。 二、DecorView只有一个子元素为LinearLayout。代表整个Window界面,包含通知栏,标题栏,内容显示栏三块区域。 ...

Activity源码浅析-DecorView

使用Activity,我们会先在onCreate方法中,设置setContentView public void setContentView(@LayoutRes int layoutResI...

Window窗口布局 --- DecorView浅析

开发中,通常都是在onCreate()中调用setContentView(R.layout.custom_layout)来实现想要的页面布局,我们知道,页面都是依附在窗口之上的,而DecorView即...

leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@405241b0 that was originally ad

先贴异常: [java] view plain copy 05-05 10:36:41.009: E/WindowManager(4243): Ac...

Android中Activity, View,Window,DecorView之间的关系

android中真正展示给用户的是window和view,activity在android中所的作用主要是处理一些逻辑问题,比如生命周期的管理、建立窗口等。在android中,窗口的管理还是比较重要的...

Android中View绘制过程(二) Activity的decorView , Window ,ViewRooImpl 分别什么时候创建

源码读起来老是容易忘掉,备忘一下记号。decorView , Window 是通过ViewRooImp来建立联系的,那么他们分别的创建时间点是在哪?看了这个忘了那个。。。。 ActivityThrea...

Android View源码解读:浅谈DecorView与ViewRootImpl

前言对于Android开发者来说,View无疑是开发中经常接触的,包括它的事件分发机制、测量、布局、绘制流程等,如果要自定义一个View,那么应该对以上流程有所了解、研究。本系列文章将会为大家带来Vi...

初探Android中Window与DecorView

Android中View可以说是最为重要的几个地方之一,包括事件分发,测量,绘制等等,都是非常常见的情况。那么我们要想好好掌握这些知识,就得深入了解Andorid整个View从开始到完成所经历的一系列...

Android减少布局层次--有关Activity根视图DecorView的思考

1 前面文章里面总结的一张图              一直觉得有关DecorView还是有些问题没有搞清楚,今天在看了一点有关SurfaceFlinger的内容以后,顿时突发奇想,想到之前的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android DecorView浅析
举报原因:
原因补充:

(最多只允许输入30个字)