什么是Android窗口中的"面板"?

Bar*_*oyd 12 android android-windowmanager

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

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

public abstract查看onCreatePanelView(int featureId)

在API级别1中添加

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

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

返回视图:要放置在面板中的顶级视图.

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()之前.如果未调用,则不会提供扩展功能.请求后,您无法关闭该功能.您可以使用FEATURE_CUSTOM_TITLE来使用其他标题功能.

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

返回:现在设置的功能.

谢谢,巴里

Bar*_*oyd 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);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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