【15】Android基础知识之Window(一)

概述

这篇文章纠结了很久,在想需要怎么写?因为window有关的篇幅,如果需要讲起来那可太多了。从层级,或是从关联,总之不是很好开口。这次也下定决心,决定从浅入深的讲讲window这个东西。

Window

Window是什么,直译是窗口,我们了解过Android应用显示层级就知道,一个应用从下到上分别是:Activity-Window-DecorView-ViewGroup-View,大致是这样的一个层级包裹。可说了这么多,还是没有说清楚window是什么?有一句话是这样说的:Window是视图的容器,视图是Window的内容。
在这里插入图片描述
又打个比方,把视图View比作水,Window比作装水的瓶子,如果没有瓶子,水就不知道放在哪里,根据瓶子的形状,大小,倒入的水就会在瓶子限制的形状,大小内呈现什么样子。这样一讲,是不是就更清楚了点呢。

Window创建

先说一下Activity,在attach方法中,会创建一个window,它是抽象的,创建的是它的实现类PhoneWindow。为什么从Activity说起呢,因为Activity是我们最常见的组件。除了Activity,Dialog和Toast也有他们的window,实现类通常也是PhoneWindow。它们的window创建,可以自行分析一下。

// Activity.java   
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    final void attach(Context context, ActivityThread aThread,
            Instrumentation instr, IBinder token, int ident,
            Application application, Intent intent, ActivityInfo info,
            CharSequence title, Activity parent, String id,
            NonConfigurationInstances lastNonConfigurationInstances,
            Configuration config, String referrer, IVoiceInteractor voiceInteractor,
            Window window, ActivityConfigCallback activityConfigCallback, IBinder assistToken,
            IBinder shareableActivityToken) {
   
   
        attachBaseContext(context);

        mFragments.attachHost(null /*parent*/);
        mActivityInfo = info;
		// 创建window
        mWindow = new PhoneWindow(this, window, activityConfigCallback);
        mWindow.setWindowControllerCallback(mWindowControllerCallback);
        mWindow.setCallback(this);
        mWindow.setOnWindowDismissedCallback(this);
        mWindow.getLayoutInflater().setPrivateFactory(this);
        if (info
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值