Android DecorView浅析

摘要:
摘要一、DecorView为整个Window界面的最顶层View。只有一个TextView显示应用(请发邮件到freeget.one@gmail.com获得最新翻强软件。只有一个TextView显示应用的名称。就是setContentView()方法载入的布局界面,加入其中。工具查看:1.下图为SDK中tools文件夹下hierarchyviewerbat查看ViewTree的结果:2.替换标题栏后ViewTree的变化:绿色区域发生了变化,改变为了载入的title.xml文件的布局。˃通知栏绘制在1号LinearLayout中,还是绘制在DecorView中还有待探究。

摘要一、DecorView为整个Window界面的最顶层View。 二、DecorView只有一个子元素为LinearLayout。代表整个Window界面,包含通知栏,标题栏,内容显示栏三块区域。 三、LinearLayout里有两个FrameLayout子元素。 (20)为标题栏显示界面。只有一个TextView显示应用

Android DecorView浅析第1张

(请发邮件到freeget.one@gmail.com获得最新翻强软件。)

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

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

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

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

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

工具查看:

1.

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

(此时未替换标题栏)

Android DecorView浅析第2张

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

Android DecorView浅析第3张

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

title.xml内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0"encoding="utf-8"?>
<LinearLayout
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代码段

1
2
3
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源码

1
2
3
public View findViewById(int id) {
returngetWindow().findViewById(id);
}

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

1
2
3
public View findViewById(int id) {
returngetDecorView().findViewById(id);
}

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

免责声明:文章转载自《Android DecorView浅析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇串口完整项目之串口收发字符串前用户sudo免密码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

用chrome模拟微信浏览器访问页面

有的网页通过限制user agent 来达到禁止在微信浏览器以外的地方访问,我们通过chrome修改user agent即可破解。 CHROME浏览器,进入开发者模式 切换到手机浏览模板 打开 Network,有下拉菜单中选择Custom->Add 选择Devices,再点击Add custom device 然后在user agent中填写下面的...

android实现程序开机自启动

在安卓中,想要实现app开机自动启动,需要实现拦截广播android.permission.RECEIVE_BOOT_COMPLETED,并且需要使用静态注册广播的方法(即在AndroidManifest.xml文件中定义广播) 1、先在AndroidManifest.xml文件中定义广播和声明权限 <uses-permission android:...

Android | 带你零代码实现安卓扫码功能

目录 小序 背景介绍 前期准备 开始搬运 结语 小序   这是一篇纯新手教学,本人之前没有任何安卓开发经验(尴尬),本文也不涉及任何代码就可以使用一个扫码demo,华为scankit真是新手的福音…… 背景介绍   最近被导师要求做一个购物收费的app,毕设好难呀~ 网上找了半天全是zxing,但是扫码效果真是有点小垃圾,无奈只能继续寻寻觅觅…...

aosp 制作 rom 刷机 添加厂家二进制驱动 及 出厂镜像

首先介绍下背景知识。 aosp 仅是一套源码,不含厂家驱动。 CM安卓的厂家驱动是自行提取的。 一般的安卓手机分区,有 boot , system, user , Baseband 基带,recovery , cache 等。 GooglePixel XL 都需要哪些 驱动呢? 1, 厂家驱动二进制。 https://developers.google.c...

Android学习——隐式Activity

使用隐式的Intent 含蓄,不指名道姓,不会指明那个Activity必须被哪个Activity所启动。 一个Activity2如何被另一个Activity1所启动,关键取决于AndroidManifest.xml中对于Activity2定义的两个标签的信息,分别是action和category。 1 <activity android:name="...

转:intent简介

转自:here 一 Android系统用于Activity的标准Intent   1 根据联系人ID显示联系人信息 [java] view plaincopy  Intent intent = new Intent();   intent.setAction(Intent.ACTION_VIEW);   //显示联系人信息   intent....