安卓窗口中的“Panel”是什么?

14
Android Window和相关页面(例如WindowManager.LayoutParams和Window.Callback)的参考文档在多个地方提到“面板”。例如,Window.Callback页面具有以下内容。

Window.Callback API从窗口返回到其调用者。这使客户端可以拦截键分派、面板和菜单等。

public abstract View onCreatePanelView(int featureId)

API级别1中添加

实例化要显示在“featureId”面板中的视图。您可以返回null,在这种情况下,将为您创建默认内容(通常是菜单)。

参数 featureId:正在创建哪个面板

返回值 view:要放置在面板中的顶级视图。

WindowManager.LayoutParams似乎将面板视为窗口“类型”,例如:

TYPE_APPLICATION_PANEL 窗口类型:应用程序窗口上的面板。 TYPE_APPLICATION_SUB_PANEL 窗口类型:应用程序窗口上的子面板。 TYPE_STATUS_BAR_PANEL 窗口类型:从状态栏滑出的面板在多用户系统中显示在所有用户的窗口上。 TYPE_SYSTEM_DIALOG 窗口类型:从状态栏滑出的面板在多用户系统中显示在所有用户的窗口上。

我还查阅了源代码,但未能在不花费数小时的情况下取得任何重大进展。
在参考文档中,Windows Panel是什么?
在相关说明中,featureId是什么?在上述onCreatePanelView(int featureId)中,它似乎是用于指定面板的ID,但在其他上下文中,它似乎用于标识一组Windows功能,例如Window.requestFeature()。

启用扩展屏幕功能。必须在setContentView()之前调用。只要在setContentView()之前调用,就可以调用任意次数。如果没有调用,将无法使用扩展功能。一旦请求了一个功能,就无法关闭该功能。您不能在FEATURE_CUSTOM_TITLE中使用其他标题功能。

参数 featureId: 所需的功能,由Window定义为常量。

返回值:现在设置的功能。

谢谢, Barry


3
为什么会有负一分?如果你有给我的问题投负票的好理由,请告诉我为什么。谢谢。 - Barry Holroyd
一个匿名的踩票,没有解释,也没有人知道答案。真遗憾。 - Barry Holroyd
1个回答

7
我对此进行了大量的研究,主要是查阅Android源代码。在大多数情况下,“Panel”似乎是与“Sub-Window”同义的,因为子窗口定义在“WindowManager.LayoutParams”中。也就是说,在FIRST_SUB_WINDOW和LAST_SUB_WINDOW(包括)之间的窗口类型。
例如,在WindowManagerGlobal.addView()函数中:
// If this is a panel window, then find the window it is being
// attached to for future reference.
if (wparams.type >= WindowManager.LayoutParams.FIRST_SUB_WINDOW &&
  wparams.type <= WindowManager.LayoutParams.LAST_SUB_WINDOW) {
    final int count = mViews.size();
    for (int i = 0; i < count; i++) {
      if (mRoots.get(i).mWindow.asBinder() == wparams.token) {
        panelParentView = mViews.get(i);
    }
  }
}

如果有人知道这个描述不准确,或者对“面板”有更广泛或不同的定义,请告诉我/我们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接