寻找布局背景图

今天在研究demo的时候发现一个奇特的现象,就是一个空白的Layout预览的时候居然有一副背景图,代码如图:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/id_mian"
    android:orientation="vertical">

</LinearLayout>

效果如图:

这里写图片描述

但是该demo在AndroidStudio里面却又是正常的,xml代码都是一样的,预览及xml代码如图:

这里写图片描述

面对这个问题,我首先去Activity里面寻找到该图片“splash_bg”,然后在Eclipse寻找该图片的引用,后来在主题(样式)里面发现如下代码:

<style name="MainTabActionBarTheme" parent="@android:style/Theme.Light.NoTitleBar.Fullscreen">
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowBackground">@drawable/splash_bg</item>
    </style>

并且该主题是在文件清单里被Activity所引用的,所以加载的效果完全一样。但是这里预览的时候为什么不一样呢?因为我们在xml布局里面并没有发现该文件指向任何Context,所以按照常规理解,该布局应该是一个空白的Layout,预览效果正常的话应该是AndroidStudio预览的这种效果。但是这里预览的时候显示出了主题赋值的背景图片,是怎么一回事呢?

首先,我们应该明白几个概念:Activity、Window、DecorView。根据事件分发机制的传递规则,可以将窗口分为几个等级,即Activity->Window->DecorView->Viewgroup……
我们这里的Layout在Activity通过setContentView()方法赋值给顶级View即DecorView,而DecorView也拿到一个空白的Layout,所以也是空白的。然后Window这里也是空白的,但是主题这里为Window增加了一个背景图片,所以加载Apk的时候显示会是先显示一下背景图片,然后才是Java代码增加的其它View。
我们明白了Apk加载效果显示的这张图片,但是我们这里是寻找布局背景图,我们Layout还并没有赋值给DecorView,并没有赋值给Window,但是显示的却是Window的背景图,这个原因是什么呢?
后来我猜是否Eclipse预览的时候是否已经经过AndroidManifest文件编译,即预览的是AndroidManifest文件编译后的效果?
如果不是的话,那么这个Window的背景图是怎么加载到xml布局的呢?求大神赐教!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值