Android和相关页面的参考文档(例如WindowManager.LayoutParams和Window.Callback)在许多地方都提到了“面板”。例如,Window.Callback页面具有以下内容。
从窗口返回到调用方的Window.Callback API。这允许客户端拦截密钥分配、面板和菜单等。
和
公共抽象视图onCreatePanelView (int featureId) 在API级别1中添加 实例化要在面板中显示的视图,以表示“功能in”。您可以返回null,在这种情况下,将为您创建默认内容(通常是菜单)。 参数featureId:正在创建哪个面板。 返回视图:要放置在面板中的顶级视图。
WindowManager.LayoutParams似乎将面板视为Windows的“类型”,例如:
TYPE_APPLICATION_PANEL窗口类型:应用程序窗口顶部的面板。TYPE_APPLICATION_SUB_PANEL窗口类型:应用程序窗口顶部的子面板.TYPE_STATUS_BAR_PANEL窗口类型:从多用户系统中的状态栏上滑出的面板,显示在所有用户的窗口上。TYPE_SYSTEM_DIALOG窗口类型:从多用户系统中的状态栏中滑出的面板显示在所有用户的窗口上。
我也仔细阅读了源代码,但没有花费几个小时的时间就无法取得任何重大进展。
参考文档中使用的Windows面板是什么?
与此相关的是,什么是featureId?在上面的onCreatePanelView (int featureId)中,它似乎是用于指定面板的ID,但在其他上下文中,它似乎用于标识一组Window.requestFeature()功能:
公共布尔requestFeature (int featureId) 在API级别1中添加 启用扩展屏幕功能。这必须在setContentView()之前调用。只要是在setContentView()之前,就可以按需要调用多少次。如果不调用,则无法获得扩展功能。一旦需要功能,您就不能关闭它。您不能在FEATURE_CUSTOM_TITLE中使用其他标题特性。 参数featureId:所需的特性,按窗口定义为常量。 返回:现在设置的功能。
谢谢,巴里
发布于 2015-12-09 21:34:29
我对此做了很多额外的研究,主要是通过Android的源代码。在大多数情况下,面板似乎是子窗口的同义词,因为子窗口是在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);
}
}
}
如果有人知道这是不准确的,或有一个更广泛或不同的定义,请让我/我们知道。
https://stackoverflow.com/questions/33925197
复制相似问题