3

我正在用 C++ 开发一个非常简单的跨平台窗口类,这样我就有了一个可以渲染的表面。到目前为止,我已经让它在 Linux 和 Windows 上运行。在我让它在 OS-X 上运行后,我想尝试让它在我的安卓手机上运行。

但是,我需要知道使用 SurfaceFlinger 创建的所有“窗口”是否都是全屏的,或者它们是否只能占用桌面的一部分,如 Linux 或 Windows 上的窗口?我问这个是因为我知道我可以在手机桌面上放置小部件,但我从未见过应用程序做任何事情,比如弹出窗口或悬停在桌面上的框架。

创建一个小于手机分辨率的“窗口”如何工作?它只是使可绘制表面居中并留下黑色边框吗?一个应用程序也可以有多个“窗口”吗?

4

2 回答 2

2

顾名思义,Surfaceflinger 处理的是表面,而不是窗口。每个窗口实际上都有一个可以绘制的表面,但这些是不同类型的类。每当以某种方式创建或更改某个应用程序窗口的 ViewRootImpl(窗口的顶视图)时,都会调用 WindowManagerService 的重新布局函数。现在,跳过一些无聊的细节,WindowManagerService 创建了一个表面。一个表面可以是任意大小,如果您使用多个显示器,它甚至可以连接到某个显示器(尽管这还没有实现)。这让我们回到您的问题: - 表面(如果您愿意,可以是窗口)可以是任何大小。您提到的黑色边框实际上来自位于当前窗口下方的窗口(并且被涂成黑色)。- 是的,

至于小部件,我知道启动器(桌面应用程序)如何支持它们并支持它们的拖放行为,但我从未问过自己它们是否实际上是新窗口 - 所以我无法真正回答这个问题。

于 2012-07-04T07:58:36.413 回答
0

一个应用程序也可以有多个“窗口”吗?是的,一个应用程序可以有多个窗口。1.状态栏窗口 2.活动屏幕窗口 3.导航窗口 4.对话框等。

于 2015-05-12T06:21:12.843 回答