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之Activity Decor View创建流程介绍

6 Activity DecorView创建流程介绍 上头已经完整的介绍了Activity的启动流程,Activity是如何绑定Window,Window的décor view是如何通过ViewRo...
  • zhejiang9
  • zhejiang9
  • 2017年02月14日 11:40
  • 522

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

1 前面文章里面总结的一张图              一直觉得有关DecorView还是有些问题没有搞清楚,今天在看了一点有关SurfaceFlinger的内容以后,顿时突发奇想,想到之前的...
  • houliang120
  • houliang120
  • 2016年04月13日 09:21
  • 6694

Android 顶级视图DecorView的前世今生

在Activity的启动过程中会执行ActivityThread#performLaunchActivity方法,其中调用Activity#attach。在attach()方法中实例化Activity...
  • qq_17250009
  • qq_17250009
  • 2017年04月27日 15:06
  • 2121

Android getDecorView用途——屏幕截图

转自:http://www.eoeandroid.com/thread-199786-1-1.html eoeandroid 推荐: Android 屏幕截图 http://www.eoeand...
  • duanyipeng
  • duanyipeng
  • 2013年01月19日 19:41
  • 3865

decorView和window之间的层级及关系

首先贴出实现Activity对话框圆角的核心代码 @Override public void onAttachedToWindow() { super.onAttachedTo...
  • guxiao1201
  • guxiao1201
  • 2014年12月05日 10:15
  • 15940

View的工作原理(一)——从ViewRoot和DecorView说起

前言 本文参考《Android开发艺术与探索》第四章内容及网上几篇博客,里面融入笔者的个人理解。希望能对大家理解View有所帮助。 基本概念介绍 介绍View的工作原理之前我们首先要理解下面两个概念:...
  • u013132758
  • u013132758
  • 2016年08月13日 17:28
  • 659

DecorView对象的创建详解

DecorView对象创建
  • u012827296
  • u012827296
  • 2016年04月29日 14:17
  • 1804

Android 自动化测试关于悬浮窗点击(DecorView)

本文对Robotium的悬浮窗实现进行一点调研     Robotium本身支持悬浮窗点击,这里我们可以参考详细看下源码     与Uiautomator稍微不一样的是Roboti...
  • xlyrh
  • xlyrh
  • 2016年11月28日 19:58
  • 553

android View事件分发

本文主要是通过示例demo以及源码来分析view的事件分发机制,文章中如果有什么不明白的地方,还请各位看官指出。...
  • liuluchao0543
  • liuluchao0543
  • 2016年11月20日 22:25
  • 241

Android自定义View和Canvas绘图解析

自定义view的流程分为measure、 layout、draw三个主要步骤,今天我们通过源码来分下下measure的过程我们从顶级view开始,顶级view即DecorView, view的事件都是...
  • shineflowers
  • shineflowers
  • 2016年12月27日 16:49
  • 4192
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android DecorView浅析
举报原因:
原因补充:

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