什么是Android窗口中的“面板”?

时间:2015-11-25 19:46:21

标签: android android-windowmanager

Android窗口和相关页面的参考文档(例如,WindowManager.LayoutParams和Window.Callback)在很多地方引用“面板”。例如,Window.Callback页面具有以下内容。

  

从Window返回其调用者的Window.Callback API。这允许   客户端拦截密钥调度,面板和菜单等。

  

public abstract查看onCreatePanelView(int featureId)

     

在API级别1中添加

     

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

     

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

     

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

WindowManager.LayoutParams似乎将Panels视为Windows“类型”,例如:

  

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

我也仔细阅读了源代码,但如果不花费数小时的时间就无法取得任何重大进展。

什么是Windows面板,如参考文档中所用?

在相关的说明中,featureId是什么?在上面的 onCreatePanelView(int featureId)中,它似乎是用于指定面板的ID,但在其他上下文中,它似乎用于标识一组Windows功能,例如,用于Window。 requestFeature():

  

public boolean requestFeature(int featureId)

     

在API级别1中添加

     

启用扩展屏幕功能。这必须在之前调用   的setContentView()。可以根据需要多次调用它   在setContentView()之前。如果没有调用,则不会扩展功能   能得到的。请求后,您无法关闭该功能。您   canot使用FEATURE_CUSTOM_TITLE的其他标题功能。

     

参数featureId:所需的特征,定义为常量   窗口。

     

返回:现在设置的功能。

谢谢, 百里

1 个答案:

答案 0 :(得分:7)

我对此做了一系列额外的研究,主要是通过Android源代码。在大多数情况下, Panel 似乎与子窗口同义,因为子窗口在WindowManager.LayoutParams中定义。即,FIRST_SUB_WINDOWLAST_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);
    }
  }
}

如果有人知道这是不准确的,或者对 Panel 有更广泛或不同的定义,请告诉我/我们。