荣耀手机窗口机制Window、PhoneWindow和DecorView是什么关系?Android开发者必知荣耀手机的窗口机制详解

荣耀手机的荣耀之路 带你了解Android窗口机制Window、PhoneWindow和DecorView之间的关系

本文目录:

2018年底谈论智能手机市场,是一件很纠结的事。

事情在这一年发生了变化。根据消费电子研究机构GfK的数据:2018年第三季度中国智能手机销量同比下滑18%,销售额同比下滑9%,首度呈现“量价齐跌”现象,且明显高于IDC公布的全球智能手机出货量第三季度同期下滑6%的趋势。2017年下半年以来的新一轮中高端智能手机换机潮戛然而止,似乎是一个高速增长故事的终结。但另一方面,全球智能手机市场发生的深刻变化仍在持续——

首先,智能手机的演进在过去的5年几乎“复刻”了当年PC增长的路径——以高通“骁龙”和华为“麒麟”为代表的处理器升级以18个月为一个周期,驱动着占智能手机70%以上市场份额的Android智能手机功能和性能的演进。其次,Android智能手机在软件和硬件上的技术突破进一步深化——人工智能、TOF摄像深感技术和网络连接技术上打破了苹果设置的智能手机发展进程,Android在技术革新上从跟随到超越,压倒了苹果iOS和同期iPhone产品。更重要的是:以华为、荣耀、OPPO和vivo等品牌为代表,中国智能手机品牌实现了全球市场的市场占有率覆盖:华为(含荣耀)超过苹果成为全球出货量排名第二的智能手机品牌,仅次于三星,OPPO和vivo占据了第四和第五名的位置。5年的时间,中国的智能手机品牌全球五分天下有其三,版图被彻底改写了。

一个有意思的现象出现了:全球智能手机版图发生颠覆性的变化,与持续了5年的全球和中国智能手机高速增长终结同时发生。这是一个脆弱的版图被“二次颠覆”的征兆,还是新一轮增长竞赛的中场休息?要回答这个问题,需要寻找整个智能手机在震荡中调整和前行的最大变量——这个变量需要脱胎于过去5年的智能手机市场跃迁浪潮,也需要是一个能释放“积极信号”的参照物;这个变量需要是全球的,也需要是中国的;这个变量需要是技术驱动的,也需要是消费心理和消费文化驱动的。

在这样的变量坐标中,“荣耀”的特殊性被凸显了。

毋庸置疑,作为一个智能手机品牌,荣耀脱胎于华为,但它不同于华为——它是过去5年中国智能手机品牌“互联网化”和潮牌化的产物,也是智能手机在AI、摄像和连接等硬核技术的前沿试验场,还是中国智能手机走向全球市场的另类开拓者。2018年12月,它诞生刚满5年。

荣耀的故事是一个关于增长的故事,也是一个关于创新的故事,一个关于全球消费文化的故事;更重要的是在当下,它是一个关于科技乐观主义的故事。

1. 重新定义“年轻人的第一部手机”

2013年12月,“荣耀”诞生,它是华为的互联网手机品牌。

准确地说,华为在智能手机市场的格局那时还没形成——更多依赖欧洲的电信运营商,独立销售渠道和营销网络还没搭建起来,P和Mate两大系列的全方位拥抱消费级市场的产品线也没那么清晰。在这种背景下推出“荣耀”品牌,其实背后有寄望弯道超车的思考:小米是当时中国乃至世界最有“现象级”效应的智能手机品牌,在中国,它主打“互联网思维”和“年轻人的第一部手机”;在全球,它开始初步探索,进入印度市场。在这个背景下,依靠华为的研发体系和全球渠道,推出一个独立的品牌,单刀直入地寻找中国智能手机“升级潮”中的年轻人,并在全球市场寻找他们的同类,是一个现实的选择,也是一个迫切的选择。

随着华为智能手机产品线的逐渐成熟,P系列和Mate系列的体系完善,“荣耀”看上去更像是一个独立于外的品牌体系。2015年初,新任荣耀总裁赵明通过与华为消费者业务CEO余承东的沟通,正式拿掉了荣耀前缀的“华为”title,荣耀从此就是荣耀。

荣耀的独立品牌给了它重新定义“年轻人的第一部手机”的便利。

小米定义“年轻人的第一部手机”主要是通过三个元素实现的:互联网化的营销和销售体系,青年消费力决定的“性价比”诉求,以及围绕着小米手机形成的“生活方式”生态——它包括智能手表、空气净化器、扫地机器人甚至背包、平衡车等产品。它是一种典型的从“技术理性”和“实用理性”立场抓住青年人的产品策略和营销方式。

它在相当程度上获得了成功,也决定了其它品牌不能“复刻”这条路线,荣耀必须另辟蹊径。

该打的仗必须要打。荣耀在“互联网化”上做了大量的基础功课,在互联网营销的经典战场——“双十一”战场上和小米进行了多年正面交锋。2018年的“双十一”,荣耀在天猫平台手机品牌销量、手机品类品牌官方旗舰店销量和销售额三个衡量维度获得冠军;在京东双十一当日手机销量、销售额以及11月1日到11月11日期间手机累计销量和Android手机累计销售额四个维度夺冠。

但更重要的真的不是在互联网上卖多少手机,而是一条根本的路径差异。都是要主打青年人群体,都是要寻找全球青年人的通关密码,小米的思路是技术理性和实用理性的,而在技术理性之外和实用理性之外(在后面的重新定义“黑科技”一节会有更详细阐述),荣耀多了“美学主义”和“感性主义”路径的加持。

这是一条见效慢但后劲足的路径,需要数年的时间来检验,目前业已被验证。

被很多人忽略了的是:荣耀在巴黎和米兰——两个全球闻名的时尚之都,都拥有“美学研究所”作为上述策略的支撑,这是中国智能手机品牌极少见到的机构设置。中国的智能手机品牌大多爱讲美学,但这种美学通常局限在“工业设计美学”,对“红点设计奖”的热衷和追逐就是这种工业美学偏执的集中体现。但一家科技公司在巴黎和米兰有美学研究所,显然不只是为了工业设计美学而为之,它背后有更宽广的美学追求:色彩美学、形象美学和品牌美学等。

这种美学,是全球潮流文化的“通关密码”。

荣耀手机在色彩上的选用是极其出挑和大胆的。红色在苹果就是红色,在荣耀被分为了“赤焰红”和“魅艳红”两种不同的红,各有层次和视觉细节渐变上的差异;蓝色——这种青年人最热衷的潮流颜色之一,被荣耀细分成了极光蓝、魅海蓝、炫影蓝和知更鸟蓝等多种蓝;黑色有幻夜黑,灰色有海鸥灰……这种对配色的执着也传递给了用户,让用户对不同手机的色彩也有了执念和追求,在荣耀的粉丝论坛和刚刚成立的“荣耀青年派”社群平台上都有大量关于色彩的争论和讨论。这不是工业设计能解决的问题,而是美学在时尚、潮流和文化领域的折射。在这条路径上,荣耀确实创造了一套智能手机的新话语体系。

“美学研究所”的贡献也在荣耀5周年的LOGO及视觉识别体系更新上有了体现——新版的LOGO和MovingColor视觉形象体系在2018年12月26日荣耀手机周年庆暨荣耀V20新品发布会上得到集中展示。“Honor”的五个字母全部更改为大写,赋予它们立体感,采用渐变的多重颜色,让其产生动感,这套被命名为“MovingColor”的视觉体系,它不仅一点都不华为,也迥异于全球任何一个智能手机品牌的视觉识别体系。这种在视觉识别上的尝试是彻底“去工业化”的。

它形成了一个用户导向的美学逻辑:从产品的色彩多元渐变,形成对荣耀基于产品的品牌认知,再从LOGO释放的相印证的品牌美学中,升华和强化这种品牌认知,这是一条有创意的道路。很多人对苹果的品牌认知是从其冷峻但优雅的LOGO开始的,进而到对iPhone早期产品冷峻、棱角分明和优雅的产品视觉认知,形成了一整套视觉美学语言体系。现在,荣耀用色彩的多元化和变化性,为从产品到品牌的美学语言进行了一次新的建构——值得注意的是,它是符合全世界大多数国家和地区的青年人的视觉审美的,也形成了一套具有全球感召力的文化符号。

成为一个有全球青年人感召力的手机潮牌,必须打破以产品为中心诠释品牌,甚至将产品形象等同于品牌形象的思路——大多数中国的手机厂商都是这么做的。荣耀在5周年之际的“品牌升级”,让我们看到了中国智能手机品牌的体系化突破——

从产品和技术上,它力推黑科技和“智慧生命体”,倡导青年人的科技理想主义;从品牌形象上,它创造视觉和形象的多彩、多元和渐变,赋予其在跨文化背景下对青年人的普世性和通关密语效应;从社群效应上,“荣耀青年派”是一个全球热爱美学、表达文化,同时又对“HONOR”有情感依托的青年人在线社群,延展了荣耀作为一个品牌而非一款手机名称的可能性。

2. 重新定义“黑科技”

青年人除了有美学认知的共同体认,还有一个普遍的共性:对硬核技术创新和突破的热爱。比起更年长群体对技术的谨慎和保守之外,青年群体普遍有着一种科技乐观主义和理想主义的倾向,愿意尝试一款技术上有大胆突破的产品。基于这点认知,荣耀成了“硬核”手机技术的前沿试验场。

荣耀在硬核技术上的突破包括两个层面的元素:一方面它的很多硬核技术来自华为的“母体”,比如芯片处理器技术,荣耀对华为“麒麟”系列移动处理器的使用是最彻底的;也包括华为“诺亚方舟实验室”(即外界耳熟能详的2012实验室)一些围绕着自然语义处理、信息检索、大规模数据挖掘、机器学习和人机交互等前沿人工智能技术的应用。另一方面,荣耀自己在智能手机的AI成像、全视屏解决方案和网络聚合连接等技术上也有自己新的尝试。前者为荣耀带来了“Magic”系列的“人工智能机”的突破,后者更多地体现在V系列新品——尤其是荣耀V20的现实技术突破上。

荣耀在前沿技术的尝试上是激进的——这种“激进主义”可以被理解为科技理想主义和科技乐观主义。Magic系列是一个非常典型的例子。

第一代Magic是以“概念机”的面目出现的,于2016年12月16日深圳大运中心体育馆发布。当时荣耀将其定义为“未来手机”——人工智能的基础技术能在一款手机上得到应用,让“智能手机”真正智能起来,变成一款“智慧手机”。

除了3D弧面玻璃等设计之外,Magic最大的亮点是MagicLive智慧系统——它能够自动感知判断,在用户需要时,会主动为用户提供服务,如同一个智慧助理在身边。同时,荣耀Magic的人工智能在每一次感知、分析理解之后,会对用户越来越了解,实现不间断的进化,用的越久,越聪明,越贴合用户需求。手机从被动沟通交互的工具到主动提供服务和帮助的助理的进化,需要操作系统进行重构,把计算机视觉、计算机自然语义理解和深度思考、学习,再加上判断,进行相应的智能决策和推荐。

荣耀总裁赵明曾坦承,“把Magic一代定义为面向未来的概念产品,并不希望它能讨好所有人”,但到了2018年10月31日发布的Magic2,就让Magic系列从实验性的概念机型,变成了荣耀的新主流机型系列——它搭载了全球首款内置双核NPU处理器的AI芯片麒麟980,也采用了前沿的石墨烯散热技术,以及能智能识别60多类标签和1500多种场景,还能进行图像语义分割的人工智能摄影成像技术。更重要的部分,是它把MagicLive智慧系统升级成了“YOYO智慧生命体”,把计算机视觉、自然语义理解、深度学习、决策系统和推荐系统等AI能力集成在一起,进一步强化它对人们日常起居、出行、安排日程和阅读、预订等生活场景的主动辅助功能。

YOYO是什么?它是人工智能在手机底层架构和操作系统层面的一次深度嵌入,让它成为“智慧生命体”,为它赋予人格化。“你好YOYO,它和别人的小爱同学有什么区别?我们今天就是要把人工智能具象化,我们自己都有一个心中想象的YOYO,你可以自己定义。但是它是一个具象化的”,荣耀总裁赵明这么解释YOYO的意义,“我们希望人工智能是有思想和灵魂的。”

荣耀还希望YOYO具有持续性,将个人的数据资产持续化和连贯化,可以延续性培养,不因为中间更换手机而中断,培养人们和“智能助理”之间的长期默契。

对AI如何主动辅助人类进行决策和沟通,过去2-3年人们通过智能音箱等产品做了很多尝试,但“智能手机”这款人们最依赖的数字产品一直被排除在“AI改变生活”的尝试之外,通过YOYO和荣耀Magic2,荣耀第一次把AI辅助决策的“智能”通过一款新机器推向了公众——它不再是一款概念机,而是一款直面用户,并且“卖断了货”的激进的智能手机消费品。

这种“把探索的全新技术大胆地加上去”的做法,在2018年12月26日发布的5周年纪念产品——荣耀V20上得到了更彻底的体现。

在网络连接上,荣耀V20采用了Link Turbo全网络聚合技术,解决了手机系统的蜂窝网络和Wi-Fi网络同时在线连接的优化和配合的问题。它还推出了基于魅眼全视屏的“屏下摄像头技术”,将前置摄像头完全嵌入到屏幕之下,屏幕不开孔,与显示屏融为一体,这是智能手机在摄像头设计上“从软到硬”的一次突破。它还采用了“4800万AI超清摄影技术”,结合华为自主研发的AI移动处理器——麒麟980升级的第四代自研ISP,以及AI超清优化技术,双核NPU等AI的计算能力,让手机摄影的清晰度到达新高度。

从通信连接,到屏幕革新,再到AI成像技术,荣耀V20的技术演进路径依然是激进的。这意味着在技术上的“激进”策略已经从作为前沿实验工具的Magic系列延伸到了更主流的V系列,两者各有侧重:前者侧重人工智能在软件操作系统层面缔造的“智慧生命体”,后者侧重人工智能在摄像和视觉等领域的突破,以及网络连接技术和屏幕再创造等底层技术和工业设计层面的技术突破。在每一款新型手机上,单向突破技术并不是什么新鲜的事,但在一款智能手机上做很多次加法,实现从软到硬,从人工智能到基础连接,从软件到工业设计的整体技术提升,这种“科技理想主义”的标签是摘也摘不掉的。

毋庸置疑,科技理想主义和科技乐观主义也是一种“科技冒险主义”。它会不会过犹不及?它会不会太“炫技”了,以至于超出了人们对一款智能手机的接受度?YOYO那么聪明,会不会令人心生恐惧?这些都是真问题,但荣耀认为,对更老成持重的中年用户和“主流”用户,事情可能是这样的。但对青年人来说,事情可能会大不同。

“市场整体在下滑,但1000元以下的部分萎缩得最厉害,3000元以上的智能手机还有增长空间。目前,用户对手机升级的欲望已经不是那么强,所以你一定要拿出最顶级的产品和设计吸引他们”,赵明对PingWest品玩说。

这个判断对荣耀瞄准的青年人群体,尤其有效。青年人比中老年人更容易接受黑科技和硬核技术,对一款手机处理器性能的增强、摄像的智能化、连接的便捷,以及人工智能助手的聪明程度有关的一切,感知更直接和敏感,反馈更明确和及时。也就是说,全世界的青年人在科技理想主义和乐观主义的情绪上,有着普遍的共通性。值得注意的是,荣耀对青年人也进行了分层——对硬核科技更“乐观”的那一部分人,荣耀希望他们成为Magic系列的拥趸,在“人工智能智慧手机”的道路上走得更远,而对硬核科技普遍乐观的普通青年人,荣耀希望通过V系列不断叠加的技术突破,更好地“团结”他们。

必须得说,智能手机厂商,尤其是中国智能手机厂商2018年在“硬核技术”上的不断进击,是一个现象级的变化。自从iPhone诞生以来,智能手机的形态已经基本上“固化”了——单一的处理器升级和软件交互层面的“微创新”已经让智能手机对普通人的诱惑力渐次衰减,整体智能手机出货量在中国和全球的下滑也是这种预期失落的体现。在这种情形下,确实需要有玩家打破iPhone设置的智能手机演进议程,这也是为什么在3D结构光、AI成像、GPUTurbo技术乃至智慧操作系统等层面,中国的Android智能手机玩家们密集创新的原因。它关系到未来2-3年,全球智能手机市场会有哪些改变,全球和中国的智能手机出货量会释放哪些更积极的信号。

在这个过程中,荣耀是最激进的,加持着科技理想主义、领先主义和乐观主义。

3. 重新定义全球化

这种科技理想主义、领先主义、乐观主义的影响力,荣耀希望通过硬核技术叠加的魅力,以及具有鲜明色彩和立体感的产品和品牌视觉,将其推广到全球。

从大环境来看,“中国智能手机全球化”也是近年来一股进击的浪潮。但大部分中国智能手机品牌的全球化都沿袭着一条既有的路径:从印度开始,进而到东南亚;通过对发展中国家和地区的渐次覆盖,实现中国智能手机品牌在全球的出海增长。

这个路径有其背后的思维体系作为支撑:印度和东南亚的印度尼西亚、越南和菲律宾等国家,与中国市场具有相当的内在一致性:它们都是人口大国,都有着城市和乡村市场的分野,青年人群体增长速度快,社交表达和文化表达渐趋活跃。另一方面,这些国家的经济发展水平较中国落后10-15年,可以复刻中国市场的增长路径和模式,有既往经验可以追寻。小米在全球化上的战略尤其展现了这样的一种思路。

但从印度到东南亚的全球化演进路径,本质上是“亚洲化”而不是真正的“全球化”,它可能存在的问题有二:第一,中国市场高速增长的既往经验和路径,因为印度和东南亚社会文化的复杂状况而无法全部复制,这是一个“中国经验”不能完全解决的问题。第二,由于经济发展阶段不同,中国智能手机在印度和东南亚的发展可能不得不走“低价化”的路线,更多地销售那些价位在150-200美元的智能手机,高端智能手机的市场容量小,很多新的技术和突破难以落地——尤其是网络环境的相对落后,更是AI和网络连接上的很多技术突破无法用武,它会反过来制约智能手机厂商的技术创新动力。

在这个问题上,荣耀尝试着走不一样的路径:从欧洲诸国等品牌高地先行切入,这背后的核心思路是:荣耀不是从中国的角度和经验上布局全球化,而是从全球化的视角上部署全球化。

“青年文化认同”自然是一个武器。荣耀在这个基础之上,也提炼了自己的全球市场价值论。

这个“全球市场价值”的判断基于两个层面:第一是人口规模,第二是国内生产总值(GDP)的总量和增长速度。按照GDP的总量,中国、美国、日本和欧洲是重要的市场,而按照人口规模,中国、印度、印尼、巴基斯坦、巴西、土耳其、俄罗斯和尼日利亚等国是重要的市场。在这两个判断维度的基础之上再进行叠加筛选,去除掉那些人口规模庞大但经济增长缺乏活力的国家地区,制定了自己的全球化路径。

它分为三个层级:重点布局的是欧洲国家,包括俄罗斯、西欧和东欧的主要国家;其次是环地中海地带的政治稳定、经济增长快速的中东国家,再次才是印度和东南亚国家。此外,荣耀在拉丁美洲正在释放经济活力的国家也有所选择:比如墨西哥、智利和哥伦比亚。

这与大多数中国智能手机全球化的路径完全不同——它更有助于荣耀在它更关注的欧洲和中东市场,销售那些单价高、自身美学识别度强烈,采用了更多硬核技术的前沿智能手机产品。“全球市场”不是低端手机产品的倾销地,而是青年人拥抱的前沿美学和硬核技术的全球试验场。用全球化的思路解决全球化的问题,是中国智能手机品牌全球化的一次升级,也奠定了“高质量全球化”的基础。

这种全球化策略目前已初见成效。目前,荣耀的海外市场销量已占全部销量的30%以上,2018年前半年的海外销量已超过2017年的海外总销量。荣耀总裁赵明对PingWest品玩透露:“荣耀未来要成为全球top3或top4的智能手机品牌。”这意味着独立于华为体系之后,荣耀要进一步取代苹果的市场份额,甚至是挤压三星、OPPO和vivo的市场份额,它显然不可能只靠印度和东南亚市场,只有占据了“主流市场”,才有和苹果三星展开正面竞争,真正拿下全球市场前三前四的位置。

“未来有全球影响力的手机品牌大概也就四五家”,这是荣耀总裁赵明的预测。如果荣耀身列其中之一的话,它必须把这条不同于传统中国智能手机品牌的全球化路径一路走到底,这也是荣耀诞生五年以来十分重要的经验总结。

带你了解Android窗口机制Window、PhoneWindow和DecorView之间的关系

作者 | Android开发编程 责编 | 欧阳姝黎

在Android框架中,每个应用界面,都有一个应用级的window。

常用的activity、dialog、Toast等都是通过通过创建window、PhoneWindow来实现,所以其实window我们一直都见到,只是不知道那就是window。

了解window的机制原理,可以更好地了解window,进而更好地了解android是怎么管理屏幕上的view。

这样,当我们需要使用dialog或者popupWindow的时候,可以懂得他背后究竟做了什么,才能够更好的运用dialog、popupWindow等。

window、phonewindow、DecorView 关系


先看图

1、每一个 Activity 都持有一个 Window 对象,

    public class Activity extends ContextThemeWrappe{ private Window mWindow;}

但是 Window 是一个抽象类,这里 Android 为 Window 提供了唯一的实现类 PhoneWindow。也就是说 Activity 中的window 实例就是一个 PhoneWindow 对象。

2、但是 PhoneWindow 终究是 Window,它并不具备多少 View 相关的能力。不过 PhoneWindow 中持有一个Android 中非常重要的一个 View 对象 Decor(装饰)View,它在 PhoneWindow 中的定义如下:

    public class PhoneWindow extends Window{ // This is the top-level view of the window, containing the window decor. private DecorView mDecor; }

3、查看 DecorView 继承关系得知,DecorView 继承自 FrameLayout

    public class DecorView extends FrameLayout {}

现在的关系就很明确了,每一个 Activity 持有一个 PhoneWindow 的对象,而一个 PhoneWindow 对象持有一个 DecorView的实例,所以 Activity 中 View 相关的操作其实大都是通过 DecorView 来完成。

Window


Android手机中所有的视图都是通过Window来呈现的,像常用的Activity,Dialog,PopupWindow,Toast,他们的视图都是附加在Window上的,所以可以这么说——Window是View的直接管理者。

源代码如下

    public abstract class Window { public abstract @Non View getDecorView(); /* Retrieve the current decor view, but only if it has already been created; * otherwise returns . * @return Returns the top-level window decor or . * @see setContentView(View, android.view.ViewGroup.LayoutParams)} * to set the screen content from a layout resource. The resource will be * inflated, adding all top-level views to the screen. * @param layoutResID Resource ID to be inflated. * @see setShowWhenLocked(boolean) 方法代替public static final int FLAG_SHOW_WHEN_LOCKED = 0x00080000;// 表示负责绘制系统栏背景。如果设置,系统栏将以透明背景绘制,// 此 Window 中的相应区域将填充 Window#getStatusBarColor()和 Window#getNavigationBarColor()中指定的颜色。public static final int FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS = 0x80000000;// 表示要求系统壁纸显示在该 Window 后面,Window 表面必须是半透明的,才能真正看到它背后的壁纸public static final int FLAG_SHOW_WALLPAPER = 0x00100000;window的solfInputMode属性这一部分就是当软件盘弹起来的时候,window的处理逻辑,这在日常中也经常遇到,如:聊天的时候,点击输入框,当软键盘弹起来的时候输入框也会被顶上去。如果你不想被顶上去,也可以设置为被软键盘覆盖。下面介绍一下常见的属性// 没有指定状态,系统会选择一个合适的状态或者依赖于主题的配置public static final int SOFT_INPUT_STATE_UNCHANGED = 1;// 当用户进入该窗口时,隐藏软键盘public static final int SOFT_INPUT_STATE_HIDDEN = 2;// 当窗口获取焦点时,隐藏软键盘public static final int SOFT_INPUT_STATE_ALWAYS_HIDDEN = 3;// 当用户进入窗口时,显示软键盘public static final int SOFT_INPUT_STATE_VISIBLE = 4;// 当窗口获取焦点时,显示软键盘public static final int SOFT_INPUT_STATE_ALWAYS_VISIBLE = 5;// window会调整大小以适应软键盘窗口public static final int SOFT_INPUT_MASK_ADJUST = 0xf0;// 没有指定状态,系统会选择一个合适的状态或依赖于主题的设置public static final int SOFT_INPUT_ADJUST_UNSPECIFIED = 0x00;// 当软键盘弹出时,窗口会调整大小,例如点击一个EditView,整个layout都将平移可见且处于软件盘的上方// 同样的该模式不能与SOFT_INPUT_ADJUST_PAN结合使用;// 如果窗口的布局参数标志包含FLAG_FULLSCREEN,则将忽略这个值,窗口不会调整大小,但会保持全屏。public static final int SOFT_INPUT_ADJUST_RESIZE = 0x10;// 当软键盘弹出时,窗口不需要调整大小, 要确保输入焦点是可见的,// 例如有两个EditView的输入框,一个为Ev1,一个为Ev2,当你点击Ev1想要输入数据时,当前的Ev1的输入框会移到软键盘上方// 该模式不能与SOFT_INPUT_ADJUST_RESIZE结合使用public static final int SOFT_INPUT_ADJUST_PAN = 0x20;// 将不会调整大小,直接覆盖在window上public static final int SOFT_INPUT_ADJUST_NOTHING = 0x30;

2、window的其他属性

  • x与y属性:指定window的位置

  • alpha:window的透明度

  • gravity:window在屏幕中的位置,使用的是Gravity类的常量

  • format:window的像素点格式,值定义在PixelFormat中

window属性赋值

    WindowManager.LayoutParams windowParams = new WindowManager.LayoutParams();windParams.flags = WindowManager.LayoutParams.FLAG_FULLSCREEN;TextView view = new TextView(this);getWindowManager.addview(view,windowParams);getWindow().flags = WindowManager.LayoutParams.FLAG_FULLSCREEN;

PhoneWindow


继承于Window类,是Window类的具体实现,即我们可以通过该类具体去绘制窗口。并且,该类内部包含了一个DecorView对象,该DectorView对象是所有应用窗口(Activity界面)的根View。

简而言之,PhoneWindow类是把一个FrameLayout类即DecorView对象进行一定的包装,将它作为应用窗口的根View,并提供一组通用的窗口操作接口。它是Android中的最基本的窗口系统,每个Activity均会创建一个PhoneWindow对象,是Activity和整个View系统交互的接口。

    public class PhoneWindow extends Window implements MenuBuilder.Callback { private final static String TAG = "PhoneWindow"; final PhoneWindowMenuCallback mContextMenuCallback = new PhoneWindowMenuCallback(this); final TypedValue mMinWidthMajor = new TypedValue(); final TypedValue mMinWidthMinor = new TypedValue(); TypedValue mFixedWidthMajor; TypedValue mFixedWidthMinor; TypedValue mFixedHeightMajor; TypedValue mFixedHeightMinor; // This is the top-level view of the window, containing the window decor. private DecorView mDecor; // When we reuse decor views, we need to recreate the content root. This happens when the decor // view is requested, so we need to force the recreating without introducing an infinite loop. private boolean mForceDecorInstall = false; // This is the view in which the window contents are placed. It is either // mDecor itself, or a child of mDecor where the contents go. ViewGroup mContentParent; // Whether the client has explicitly set the content view. If false and mContentParent is not // , then the content parent was set due to window preservation. private boolean mContentParentExplicitlySet = false; Callback2 mTakeSurfaceCallback; InputQueue.Callback mTakeInputQueueCallback; boolean mIsFloating; private boolean mIsTranslucent; private LayoutInflater mLayoutInflater; private TextView mTitleView; DecorContentParent mDecorContentParent;}

它是Android中的最基本的窗口系统,每个Activity 均会创建一个PhoneWindow对象,是Activity和整个View系统交互的接口。

DecorView


作为顶级View,DecorView一般情况下它内部会包含一个竖直方向的LinearLayout,上面的标题栏(titleBar),下面是内容栏。

通常我们在Activity中通过setContentView所设置的布局文件就是被加载到id为android.R.id.content的内容栏里(FrameLayout)

    /*@hide /public class DecorView extends FrameLayout implements RootViewSurfaceTaker, WindowCallbacks { private static final String TAG = "DecorView"; private static final boolean DEBUG_MEASURE = false; private static final boolean SWEEP_OPEN_MENU = false; // The height of a window which has focus in DIP. private final static int DECOR_SHADOW_FOCUSED_HEIGHT_IN_DIP = 20; // The height of a window which has not in DIP. private final static int DECOR_SHADOW_UNFOCUSED_HEIGHT_IN_DIP = 5; private static final int SCRIM_LIGHT = 0xe6ffffff; // 90% white private Drawable mMenuBackground; private boolean mWatchingForMenu; private int mDownY; ActionMode mPrimaryActionMode; private ActionMode mFloatingActionMode; private ActionBarContextView mPrimaryActionModeView; private PopupWindow mPrimaryActionModePopup; private Runnable mShowPrimaryActionModePopup; private ViewTreeObserver.OnPreDrawListener mFloatingToolbarPreDrawListener; private View mFloatingActionModeOriginatingView; private FloatingToolbar mFloatingToolbar; private ObjectAnimator mFadeAnim; // View added at runtime to draw under the status bar area private View mStatusGuard;}

DecorView它主要有以下功能总结:

  • 作为顶级View,DecorView一般情况下它内部会包含一个竖直方向的LinearLayout,上面的标题栏(titleBar),下面是内容栏。通常我们在Activity中通过setContentView所设置的布局文件就是被加载到id为android.R.id.content的内容栏里(FrameLayout);

  • Dispatch ViewRoot分发来的key、touch、trackball等外部事件;

  • DecorView有一个直接的子View,我们称之为SystemLayout,这个View是从系统的Layout.xml中解析出的,它包含当前UI的风格,如是否带title、是否带processbar等。可以称这些属性为Window decorations;

  • 作为PhoneWindow与ViewRoot之间的桥梁,ViewRoot通过DecorView设置窗口属性。//可以这样获取 View = getWindow().getDecorView();

  • DecorView只有一个子元素为LinearLayout。代表整个Window界面,包含通知栏,标题栏,内容显示栏三块区域。DecorView里面TitleView:标题,可以设置requestWindowFeature(Window.FEATURE_NO_TITLE)取消掉ContentView:是一个id为content的FrameLayout。我们平常在Activity使用的setContentView就是设置在这里,也就是在FrameLayout上;

  • 每一个Activity都包含一个Window对象(dialog,toast 等也是新添加的window对象),而Window是一个抽象类,具体实现是PhoneWindow。在Activity中的setContentView实际上是调用PhoneWindow的setContentView方法。并且PhoneWindow中包含着成员变量DecorView。

总结:

Window类相当于一幅画,PhoneWindow为一副山水画(具体概念,我们知道了是谁的、什么性质的画),DecorView则为该山水画的具体内容。DecorView呈现在PhoneWindow上。

![带你了解Android窗口机制Window、PhoneWindow和DecorView之间的关系](https://p3-sign.toutiaoimg.com/pgc-image/SMjepc48fJiBGU~tplv-tt-large.image?x-expires=1994844837&x-signature=jjaicYDYNBWGWTLDOG4XCm4n6Ww=)

MIUI抄袭iOS吗?看了这些就明白了

IT之家(www.ithome.com):MIUI抄袭iOS吗?看了这些就明白了

随着MIUI 6的发布,互联网上出现了一些质疑的声音:MIUI 6是不是太像iOS7了?是不是抄袭呢?其实说出这些话的,一般都是没有用过,或者没有从一开始就使用MIUI的用户。不妨这一次我们来扒一扒MIUI那些广受喜爱的原创功能吧。

1.高斯模糊

iOS 7上面大量毛玻璃风格的使用,的确让高斯模糊这个设计偏向Apple Design。可是要知道这个设计其实早在WindowsVista发布时,就已经使用在其中的Aero Glass界面风格之中。MIUIV5发布之后(2013.4.9)的文件夹背景就采用了Blur风格做全局模糊处理,而几个月之后iOS 7才发布,并且文件夹是局部Blur。

Aero Glass风格

2.对齐唤醒/自启动管理

Android平台下的应用会因为各种类型的事件而唤醒设备,例如联网进行消息检测、数据交换等,每个应用有事件发生时即需要设备调用资源进行处理,会产生电量消耗。MIUI的对齐唤醒统一时间节点允许应用处理事件,避免多次唤醒造成过多的电量消耗。

3.识别服务号码(识别陌生号码)

发布时间:最初版本MIUI

最早在系统级别加入了来电归属地显示的功能,其后还陆续增加了服务号码识别、陌生来电标记等功能。对于呼入的电话,用户可以判断出其来源,比如房屋中介,甚至可以准确知道呼入对象,只有极小的概率需要面对“未知”带来的不安全感。

4.短信支持语音以及视频发送

6月份的iOS8发布时,短信方面添加了发送语音以及视频的功能,希望更加直观的方便人与人之间的交流。其实这项小功能早在12年10月就已经在MIUI上面出现了,当时网络短信就支持彩信发送,只需要进入短信内设置开启。你可以发送视频、音频、图片等多种多媒体内容。

5.日历、闹钟支持公休假日

信息本土化也是MIUI在不断完善的。“十一黄金周”、“五一小长假”对于中国人来说显得尤为重要,很多人忙碌了一阵子就期待可以在这段时间内轻松一下,安排一些旅行、游玩的事件。所以在日历内支持公休假日的显示,不仅可以方便用户安排休假时间,也方便待办事项的添加,让用户充分利用假期的每一天。而这些本土化的内容,在iOS和原生Android中是不会添加进去的。

6.桌面手势

我想大家一定知道,MIUI快速的图标整理功能,按住应用的同时还可以滑动屏幕放置图标,从发布的第一刻起,就是MIUI的专属,四年多的时间,只有MIUI拥有。我们再也不需要把图标拉往边缘,也不会担心打乱图标,我们需要这样更简单的操作。

7.联系人智能分组和智能头像

联系人智能分组你是否还在为发短信的时候面对几百甚至上千的联系人里面查找一些号码头疼呢?是否还在为每添加一个新的联系人就要手动进行分组而困扰呢?现在不用担心咯,MIUI智能分组功能,可以根据公司、所在地、最近联系时间自动进行联系人分组,并且我的群组页显示,让MIUI帮你智能管理联系人分组吧!

偷偷说一下哦,想要按照公司分组的话,只需要在联系人信息里面写上相应的公司名称,就会自动的进入分组哦~

联系人智能文字头像智能文字头像的目的是为没有头像的联系人默认显示由名字中的一个字生成的头像。这个功能最早的原型在MIUI最开始的版本2.2中就有了,由MIUI的最早的工程师之一AC大神开发。

在早期版本中的实现方式是,在给联系人设置头像的时候,在备选图片中就有一张是由名字当中的一个字生成的头像,当时背景是很经典的白色字体 黄色的田字格,不知道MIUI老用户是否还记得。这个时候是把一张合成的图片写到联系人数据中。所以在gmail端或者备份到其他手机,该头像还是有的。

后期的新功能对智能头像做了新的包装,不再由用户手动一个个为没有头像的联系人设置头像了。而是变成一个快捷开关,默认打开,不喜欢这个功能的可以在设置中关闭。新功能跟老版本最大的区别在于,智能生成的头像不需要保存在联系人数据库中了,这样的好处是头像的字体,背景都可以用主题的方式替换。坏处是头像是虚拟的,在gmail或者micloud端(未来可以支持)看联系人是没有头像的。

8.全局大字体

在MIUI之前,从来没有人如此认真的对待大字体。iOS的大字体模式根本只是把纯文本阅读类界面的字号变大,从短信列表页进入会话详情页,字号变化的冲突感令人无法直视。MIUI的大字体是不一样的,从桌面图标的3列式布局,到通话记录界面的全部重新设计,MIUI不放过每一个细节。

9.手电筒快捷开关

几乎每台手机都会配备相机补光灯,可是实际使用时大都不会开启。有不少软件都利用这一点做成手电筒功能,方便用户使用,可是作为App开启速度慢、步骤复杂。MIUI下长按Home键就可以快速开启,方便省事。iOS7时才将手电筒收纳在控制中心中,并且仍然需要解锁、上滑才可以开启。

10.录音防打扰

这个功能对于记者朋友来说简直就是福音:重要访问再也不会被突然的来电打扰了;手机没电了还能录到关机,边录边存。这个功能在MIUI第131周也就是13年的3月发布,之前录音机很好用,之后录音机更好用。MIUI录音机仍然是各大媒体最爱用的录音工具。

11.短信群发称呼

如何让功能更人性化,是MIUI一直追求的。就拿很简单的群发短信来说,当你添加多个联系人却又不得不在短信内单独添加称呼时,自动插入联系人称呼的功能显得尤为重要。编辑短信后,选择插入位置,点击群发称呼,就可以将选中联系人的名称直接加入短信内,并且发出去的称呼时一一对应的,需要时还可以批量自定义。配合短信内的模板使用,在过年过节的时候非常方便省事。

12.主题/百变锁屏/自由桌面/动态图标/图标滤镜

百变锁屏

MIUI的主题真的是强大给力到没朋友!2010年发布时还只是一个换肤的功能,在2011年“百变锁屏”问世后开始一路高潮,解锁从此绚烂到颠覆人类的想象力了。

百变锁屏教程:http://wiki.dev.xiaomi.com/index.php?title=MAML教程

自由桌面

2012年发布自由桌面时,更是把地球人的热情全部点燃,从此桌面不再是略略无聊的宫格视图,只要你敢想,一切皆有可能!

自由桌面介绍视频:http://v.youku.com/v_show/id_XNDM5NjgxMzQw.html

动态图标

天气图标会随着天气的变化改变图标样式,如下雪会有雪花,下雨会有雨点,大雾则会有白色烟雾,天晴为一片白云和蓝天,而当前温度也会直接显示在图标上。如图显示的天气为大雾、温度6℃。日历方面显而易见,会显示当前公历日期。当前22号。网络助手则会随着流量的使用,产生百分比的变化。当你看着雪白的0%图标,变成了90%的时候,是否也会开始担忧起来呢。

图标滤镜

目前,主题市场中的某些主题存在一个共性的问题:设计风格很好看,但搭配第三方图标的违和感却很严重。如果设计师没做第三方图标,这种违和感会极大地破坏主题美感。“图标滤镜”这个功能就是为了解决这个问题。从此以后,设计师在制作主题时,可以为第三方图标创建一个滤镜,统一改变第三方图标的样式!这个滤镜最大的价值在于:减轻设计师负担,减少第三方图标的违和感。

13.语音菜单可视化

拨打服务号码需要不厌其烦的听语音提示而后时不时的从耳边拿开手机按下对应数字?这是固定电话时代的无奈,现在不该再用这样落后的方式了。MIUI在197周新增的语音菜单可视化,所有选项点击即达。

14.小米黄页

为什么拨号软件只能进行电话拨号?为什么不可以加入一些便捷的信息查询,让拨号更智能?小米黄页的加入一下解决了拨号功能单一这一点。你可以在拨号软件内查快递、交话费、查服务电话,拨号俨然变成了一个生活信息服务中心,小米黄页不是独立App,它融入了拨号之中。这个功能的背后需要的是细致的本土生活信息支持,只有国内的公司才有可能去进行定制和完善。

15.智能通知

正在玩游戏,只想自己一个人享受电影时光?MIUI在14年5月发布了独家智能通知功能,看电影的时候短信不会跑出来,玩游戏的时候来电不会打断你。这个高效又好用的设计,只想让你专注你正在做的事,不被外界的纷纷扰扰所打扰,内容才是本质。

16.声控相机

喝小米粥的那天,如果有了这个功能,大合照也许更完美。MIUI相机早在2012年7月20日就已支持声控功能,只需“啪”一声,让照片更加完整。是时候刷一个MIUI了,因为有些功能我们已做到极致,而他们貌似才刚刚开始。

大家都在看
本文经用户投稿或网站收集转载,如有侵权请联系本站。