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:所需的特征,定义为常量 窗口。
返回:现在设置的功能。
谢谢, 百里
答案 0 :(得分:7)
我对此做了一系列额外的研究,主要是通过Android源代码。在大多数情况下, Panel 似乎与子窗口同义,因为子窗口在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);
}
}
}
如果有人知道这是不准确的,或者对 Panel 有更广泛或不同的定义,请告诉我/我们。