我正在用C++开发一个非常简单的跨平台窗口类,这样我就有了一个可以渲染的图面。到目前为止,我已经让它在Linux和Windows上工作了。在我让它在OS-X上工作之后,我想试着让它在我的android手机上工作。
但是,我需要知道是否所有用SurfaceFlinger创建的“窗口”都是全屏的,或者它们是否只能像Linux或Windows上的窗口那样占据桌面的一部分?我这么问是因为我知道我可以把widgets放在我手机的桌面上,但我从来没有见过一个应用程序能像弹出窗口或悬停在桌面上的框架那样做。
创建一个比手机分辨率小的“窗口”是如何工作的?它只是将可绘制的表面居中并留下黑色边框吗?一个应用程序还可以有多个“窗口”吗?
发布于 2012-07-04 15:58:36
顾名思义,Surfaceflinger处理的是表面,而不是窗口。每个窗口实际上包含一个可以在其上绘制的表面,但这些是不同类型的类。每当以某种方式创建或更改某个应用程序窗口的ViewRootImpl (窗口的顶视图)时,都会调用WindowManagerService的relayout函数。现在,跳过一些无聊的细节,WindowManagerService创建一个曲面。一个表面可以是任意大小的,如果你使用多个显示器,它甚至可以附加到某个显示器上(尽管这还没有实现)。这将我们带回到你的问题上:-一个表面(如果你喜欢窗口)可以是任何大小。您提到的黑色边框实际上来自放置在当前窗口下方的窗口(并且被绘制为黑色)。-可以,一个应用程序可以有多个窗口(例如,一个窗口可以是一个对话框)。
至于窗口小部件,我知道Launcher (桌面应用程序)是如何支持它们的,并支持它们的拖放行为,但我从来没有问过自己它们是否是新窗口-所以我真的不能回答这个问题。
发布于 2015-05-12 14:21:13
一个应用程序还可以有多个“窗口”吗?是的,一个应用程序可以有多个窗口。1.状态栏窗口2.活动屏幕窗口3.导航窗口4.对话框等等。
https://stackoverflow.com/questions/11211894
复制相似问题