Android图形用户界面开发之ViewTree和DecorView详细介绍

其不仅能为用户提供输入,还能够根据(用户)执行的动作,提供相应的反馈。
因此,作为开发人员,能
【菜科解读】
图形用户界面(GUI)是Android应用程序开发不可或缺的一部分。
其不仅能为用户提供输入,还能够根据(用户)执行的动作,提供相应的反馈。
因此,作为开发人员,能够理解UI(用户界面)是如何创建以及跟新的,就显得尤为重要。
ViewTree
View 和 ViewGroup 是Android UI的基本组件, 而ViewGroup作为容器,可以包含一组View, 并且ViewGroup其本身就是View的扩展。
看源码:
public abstract class ViewGroup extends View implements ViewParent, ViewManager{}而各种不同的Widgets 像TextView, Button 等等 也是View的扩展,只不过是放在各种Layout里,比如LinearLayout,RelativeLayout。
而Layout却是ViewGroup的子类。
所以说一个ViewTree只不过是各种Views和ViewGroups放在一个Layout里组成的树形结构。
有例子才有真相。
通过eclipse的Outline窗口,我们可以看下下面这个树状布局。
XML Code:
?xml version="1.0" encoding="utf-8"?>当我们在Activity里,用setContentView()去设置这个view,然后运行,我们可以看到如下图:
仔细观察XML文件,以及页面渲染的View,我们会发现:
1. ViewTree 是以一种自上而下的方式进行遍历实现。
2. Parent总是最先绘制的,其实才是Children,并且仍然遵循自上而下的方式。
所以在我们的例子中,RelativeLayout是最先绘制,接着是其孩子WhiteView,RedText 等等,
直到最终GrayView绘制,并且我们会看到后绘制的覆盖了部分先绘制的。
为了更方便观察这些Views是怎么绘制的,我们把手机屏幕看作下面的X,Y,Z的坐标系。
屏幕的左上角作为[0,0,0],X轴向右,Y轴向下沿着屏幕的长度,Z轴延伸出屏幕。
所以说,当我们遍历Tree的时候,这些Views基本上就是沿着Z轴排放。
这里需要注意,当View有部分被遮挡时,Android就不会再绘制这被遮挡的部分。
比如上图,灰色遮挡部分红色,Android绘图机制就不会再绘制那部分红色,所以我们看到的是直接遮挡,而不是颜色的混合。
现在我们知道了我们在XML里定义的Views是如何绘制的了,但是这还不够,我们可以借助一个非常有用的工具Heirarchyviewer去更深层细的观察页面布局。
Heirarchyviewer 在文件夹android-sdk/tools下,在命令行下找到这个文件夹,然后执行heirarchyviewer.bat 就可以了。
下图是Hierarchy Viewer的截图:
在Hierarchy Viewer里,列代表树的深度,而每一列里行的数量则表示每一层的深度。
从图上我们能注意到RelativeLayout并不是Root级别的,而是id为content的FrameLayout的一个子元素。
而实际山我们调用setContentView(View v)里的View v 就是这个content视图。
现在注意下跟content同级的FrameLayout有个子TextView,实际上它既是Activity的titleBar。
那么我们删除这个TitleBar之后,View Tree又会变成什么样子呢?
方法:在manifest文件,然后修改application的主题如下:
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"这样再打开Hierarchy Viewer,我们就能看到下图:
(注意:本人选用的Android是2.2的,要是用4.1的话,并不能得到下图,中间还会多一个Id为action_menu_bar_stub的ViewStub)
这时候我们看到content FrameLayout的父元素是PhoneWindow$DecorView。
DecorView
我们知道在Android中抽象类Window定义了最上层窗口的基本外观以及基本行为,她的实例将会被加到WindowManager中,提供一些标准的UI策略,像Background,Titlebar,以及Default key processing等等,当然这些属性是可以通过WindowManager.LayoutParams定制的。
而上面提到的PhoneWindow是Window抽象类的唯一实现,即android.policy.PhoneWindow。
而DecorWindow是PhoneWindow的一个私有内部类,其实就是一个FrameLayout的扩展。
private final class DecorView extends FrameLayout implements RootViewSurfaceTaker {}就是这个类构成了最上层应用程序视图。
根据我们在Manifest中设置的Theme或者在PhoneWindow设置的Flags,来确定DecorView的Layout。
所以在我们的例子中,第一张中我们有个简单的主题(在Manifest中)包含一个titlebar和contentview,于是PhoneWindow就生成了包含Title的LinearLayout,以及放置content的FrameLayout。
而在第二张图中,我们去掉了titlebar主题,所以她就只生成了包含FrameLayout的DecorView了。
结论
最后我们来总结下,当一个Activity被启动的时候,这个视图树(View Tree)大体是如何创建的呢:
1. PhoneWindow根据Manifest的主题或者是特定的PhoneWindow设置去生成一个DevorView的布局,作为跟视图(Root View)。
2. Activity调用setContentView()方法把用户自定义的Layout XML文件作为内容视图(Content View), 当然其内部是调用PhoneWindow的setContentView()方法。
3. 经过上两步,UI视图就已经形成了,那么当UI每次被刷新的时候,View Tree就会像上面所说的那样被Traverse。
Android,图形,用户界面,开,发之,ViewTree,Win7/8/10右键图形属性和图形选项隐藏技巧
软件支持 在线重装、U盘制作、自定义重装 等多种模式。
在Win7/8/10系统桌面右键有 图形选项 和 图形属性 这两个选项,不过,这2个功能用户很少会用到,为了节约资源也为了更美观,小编建议把这两选项去除。
那么,Win7/8/10右键图形属性和图形选项怎么隐藏呢?请看下文具体介绍。
电脑右键图形属性和图形选项的去除步骤如下:此文操作以Win10为例,操作原理同样适合其他系统 1、首先打开注册表。
方法是,打开运行命令框,然后键入命名:regedit 然后点击 确定 即可进入。
2、依次展开注册表 HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers 删除里面的 igfxDTCM 就可以了,如图。
3、最后重启任务管理器或者重启一下电脑,再去看看电脑桌面右键是不是没有了。
以上就是Win7/8/10右键图形属性和图形选项隐藏技巧,有需要的用户不妨参考本文方法来隐藏,希望可以帮助到大家。
注意:本站所刊载的文章均为学习交流之用,请勿用于商业用途。
对于商业使用,请联系各自版权所有者,否则法律问题自行承担。
Win7系统升级指南:全面解析升级步骤与要点 Win7系统损坏修复教程:详细步骤助你快速解决问题 Win7/8/10右键图形属性和图形选项隐藏技巧 分类于: 回答于:2016-03-05 在Win7/8/10系统桌面右键有 图形选项 和 图形属性 这两个选项,不过,这2个功能用户很少会用到,为了节约资源也为了更美观,小编建议把这两选项去除。
那么,Win7/8/10右键图形属性和图形选项怎么隐藏呢?请看下文具体介绍。
电脑右键图形属性和图形选项的去除步骤如下:此文操作以Win10为例,操作原理同样适合其他系统 1、首先打开注册表。
方法是,打开运行命令框,然后键入命名:regedit 然后点击 确定 即可进入。
2、依次展开注册表 HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers 删除里面的 igfxDTCM 就可以了,如图。
3、最后重启任务管理器或者重启一下电脑,再去看看电脑桌面右键是不是没有了。
以上就是Win7/8/10右键图形属性和图形选项隐藏技巧,有需要的用户不妨参考本文方法来隐藏,希望可以帮助到大家。
菜科网系统致力于解决 Windows 系统重装解决方案,提供高效、安全、免费的系统重装服务。
powerpoint2007设计立体图片和图形效果
比如下面的图形预设,如果用在PPT里是不是会有种非常华丽的感觉呢?事实上,很多人都认真的问过我下图中第二个图像时怎么做的,我只好无奈地说:使用PowerPoint的预设,一步搞定! 如何调整呢? 这张里的三个不错的对象,用上面的这种设置方法就可以轻松完成。
不过细心地作者还用了少许半透明线条勾勒出光线效果。
如果你很赶时间,只需要加上阴影就可以令你的PPT改观不少。
powerpoint2007,设计,立体,图片,和,图形,效