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

作者:小菜 更新时间:2025-02-27 点击数:
简介:图形用户界面(GUI)是Android应用程序开发不可或缺的一部分。

其不仅能为用户提供输入,还能够根据(用户)执行的动作,提供相应的反馈。

因此,作为开发人员,能

【菜科解读】

图形用户界面(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,

显卡性能提升指南:优化设置提高游戏体验

在现代游戏的世界中,显卡的性能直接影响到游戏体验。

无论是追求顶尖画质的3A游戏大作,还是注重流畅性的竞技游戏,通过优化显卡设置可以显著提高游戏的表现。

本指南将帮助您通过一系列优化技巧来提升显卡性能,以获得更好的游戏体验。

工具原料:系统版本:Windows 11(22H2)品牌型号:NVIDIA GeForce RTX 4070(或更高型号),AMD Radeon RX 6800 XT(或更高型号)软件版本:NVIDIA GeForce Experience (3.26)、AMD Radeon Software Adrenalin (21.9.1)一、更新显卡驱动程序1. 保持显卡驱动程序最新是提升显卡性能的重要步骤。

显卡制造商定期发布驱动程序更新,通常包括性能优化和错误修正。

使用NVIDIA GeForce Experience或AMD Radeon Software可以自动检查和安装最新驱动。

2. 在某些情况下,新驱动可能导致兼容性问题,此时可以尝试回滚到之前稳定版本的驱动程序以解决问题。

二、优化图形设置1. 大多数游戏允许玩家调整图形设置以平衡画质和性能。

建议根据显卡性能手动调整游戏内的图形选项,关闭不必要的特效(如阴影、抗锯齿)可以明显提升帧率。

2. 通过NVIDIA或AMD驱动程序设置面板,可以强制全局或特定游戏的图形选项,例如调整垂直同步(V-Sync)、纹理过滤等,以进一步优化性能。

三、启用硬件加速和图形增强功能1. 在NVIDIA控制面板中,启用硬件加速GPU调度(Hardware-accelerated GPU Scheduling)可以降低图形处理延迟,提高帧率。

2. 对于AMD用户,Radeon Boost功能可以在游戏中快速场景变化时动态降低分辨率,以提升性能而不明显影响画质。

四、调整系统设置1. 关闭不必要的后台程序和启动项以释放系统资源。

任务管理器中的“启动”标签可以管理哪些程序在系统启动时自动运行。

2. 确保Windows电源计划设置为“高性能”,特别是使用笔记本电脑时,以防止系统为节能而限制显卡性能。

五、优化散热和电源设置1. 良好的散热管理可以防止显卡因温度过高而降频,从而维持最佳性能。

定期清理机箱内灰尘,确保足够的风道和风扇运行良好。

2. 查看显卡电源设置,调整为最大性能模式,确保显卡能够处于其设计的峰值功率状态。

拓展知识:1. 显卡性能不仅取决于显卡本身,还受系统整体结构影响。

拥有足够的CPU和内存支持才能充分发挥显卡的能力。

在选择显卡时,也需考虑电源供应额定功率是否足够。

2. 游戏显卡通常分为集成显卡和独立显卡。

集成显卡适合运行轻量级应用,而对于性能要求较高的应用和游戏,独立显卡更为合适。

3. 当系统性能达到瓶颈时,可能需要考虑升级其他硬件组件,例如增加RAM或更换更高级的处理器。

Win7显卡驱动下载指南:轻松获取并安装最新版本驱动教程

在使用Windows 7操作系统的用户中,显卡驱动更新是一个常见的任务。

无论是在游戏、图形设计,还是其他多媒体应用中,显卡的性能直接影响到体验的流畅度和质量。

然而,由于Windows 7系统的官方支持已经结束,其显卡驱动的下载和更新更加考验用户的动手能力和资源利用。

本文旨在为您提供一个详细且简单易行的Win7显卡驱动下载指南,并帮助您顺利安装最新版本驱动。

工具原料:系统版本:Windows 7 SP1品牌型号:Dell XPS 15, Nvidia GeForce GTX 1650显卡软件版本:Nvidia GeForce Experience 2023年版一、为什么需要更新显卡驱动?1、显卡驱动是软件与硬件沟通的桥梁。

定期更新显卡驱动可以提高设备的性能,有效解决系统与应用程序在不同环境下的兼容性问题。

2、尤其对于那些在Windows 7系统上运行最新游戏或图形应用的用户,新的显卡驱动程序通常会包含优化更新,从而提升运行帧率和画质表现。

二、下载Win7显卡驱动的步骤1、打开网页浏览器,访问显卡制造商的官方网站。

对于使用Nvidia显卡的用户,可以直接访问Nvidia官方驱动下载页面。

2、进入驱动下载页面后,使用搜索框或菜单选择您的显卡型号(如GeForce GTX 1650)和操作系统版本(Windows 7 64-bit)。

3、确认所选信息无误后,点击下载链接,开始下载最新的显卡驱动程序。

这通常是一个大约300-500MB的可执行文件。

三、安装并配置显卡驱动1、下载完成后,双击下载的驱动程序文件,启动安装向导。

请确保关闭全部与显卡相关的应用程序,以免影响安装进程。

2、在安装向导中,根据提示选择“自定义安装”以排除不必要的组件,并减少不兼容风险。

3、安装完成后,重启计算机以使新的驱动生效。

重启后可以使用设备管理器查看显卡驱动状态,确保一切正常。

拓展知识:1、驱动程序的重要性:显卡驱动其实等同于电脑与显卡之间的翻译员。

错误或过时的驱动可能导致系统崩溃、应用程序无法运行甚至硬件损坏。

2、使用自动化工具:对于不太习惯手动下载和安装驱动的用户,可以使用像Nvidia GeForce Experience这样的软件,它可以自动检测并更新显卡驱动。

3、安全注意事项:在下载驱动时间要确保是在官方途径进行,以保护您的系统免受恶意软件的攻击。

加入收藏
               

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

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录