我们每天都用洪荒之力在手机在屏幕上搓来搓去,在有限屏幕上感受近乎无限的内容,平时在消费应用提供的内容时由于过于沉浸,往往会忽略应用本身结构。我们之所以能够感受到无限的内容,是因为我们通过操作将原本“不在屏幕中的内容”拖到了屏幕中,无论是应用内部提供的内容,还是通过切换应用看到的内容。
我们在切换应用时的直观的感受是每个应用都有一个相对独立的承载体,这个承载体在早期的系统中是以类似进程的概念存在的,每个应用有一个进程,通过点击应用切换界面中应用的icon来切换到指定的进程上的(这里的一个进程是为了方便理解,其实可以有多个)。
这种进程管理的概念有些晦涩,新的Android系统则以多窗口的形式来展示应用内部及应用之间的关系了。每个应用启动后都由一个窗口来承载,同时这个应用还能衍生出多个平级的窗口来承载不同的内容,所以,原本在同一个屏幕中通过切换进程来唤起应用界面的概念变成了将指定的应用窗口拖到当前屏幕显示(别看晕了:-D)。
事实上,在Android系统中,这种完整应用内容的载体确实被包装成了窗口的概念。这里需要区分一下窗口和视图,交互设计师画的原稿中经常用一个框框加箭头指向另一个框框,这个框框与窗口的概念基本是相同的,而框框里面具体的内容(按钮,图标啥的)可以认为是视图的概念。
可能你会认为有视图就够了,因为只要能让用户看到内容就可以了,窗口在这里看起来是个可有可无的东西。理论上是可以的,反正都是向同一块屏幕上画东西。这样说有一定的道理,但是一个手机系统就如同一家庞大的公司,理论上来讲一个公司不要部门,所有人坐在一起只要能干事就行了,但想想其实挺不靠谱的。Android系统中的窗口就如同公司的部门一样,是行政管理级别的概念。
现实中部门管理的逻辑在Android系统中也是类似的,比如一个部门还有多个子部门,而应用的一个顶级窗口(Activity为载体)也可以有多个子窗口(Dialog为载体),部门中有真正干事的人员(View为载体)。我们先简单的认为一个应用一个窗口,显然一个应用的窗口销毁了,一般不会影响到其它应用的窗口,但是从属于该应用窗口上的子窗口则会被一锅端。
Activity+Dialog+View组成了我们平时所见的界面,Activity是一个窗口,上面有很多的View,当有一些警告或确认的信息时可以弹出一个Dialog。Android系统本身允许的定制程度很高,通过缩小Activity来让它显得像一个Dialog,也能让Dialog充满整个屏幕显得像一个Activity。这样我们可以脑洞一下如何在遵守系统规则的情况下玩出一些花样。
我先抛块砖:我想在别人的界面上弹一个Dialog,用户点击后将其引流到自己的应用,同时要让用户以为这两个应用在做某种合作。现在问题是Dialog是子窗口,自己的应用没法利用别人的窗口弹Dialog,没关系,我们做一个像Dialog的Activity,通过监听一定的时机来弹出,Android上可以跨应用读取资源,这样完全可以将别人应用的主题应用到自己弹出的Activity上,同时又是Dialog样式显示的,就好像应用本身原生弹出的一样。
(本文虽然主要说的是Android系统,其实IOS,包括Windows也都是类似的。)
发挥想象力哦
赞赏
人赞赏
哪家治疗白癜风比较好治白癜风的医院哪里好