public boolean dispatchKeyEvent(KeyEvent event);
public boolean dispatchKeyShortcutEvent(KeyEvent event);
public boolean dispatchTouchEvent(MotionEvent event);
public boolean dispatchTrackballEvent(MotionEvent event);
public boolean dispatchGenericMotionEvent(MotionEvent event); 移动事件
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event);
public View onCreatePanelView(int featureId);
public boolean onCreatePanelMenu(int featureId, Menu menu);
public boolean onPreparePanel(int featureId, View view, Menu menu);
public boolean onMenuOpened(int featureId, Menu menu); 用户选择菜单项。
public boolean onMenuItemSelected(int featureId, MenuItem item); 用户选择菜单项。
public void onWindowAttributesChanged(WindowManager.LayoutParams attrs); 当前窗口属性改变。
public void onContentChanged(); 窗口的view发生改变。
public void onWindowFocusChanged(boolean hasFocus);窗口的焦点发生变换
public void onAttachedToWindow(); 窗口附加到窗口管理器上。
public void onDetachedFromWindow(); 窗口从窗口管理器上摘除。
public void onPanelClosed(int featureId, Menu menu);
public boolean onSearchRequested(); 当用户按下了search按钮。如果启动了搜索界面则返回true,如果不能执行则返回false。
public ActionMode onWindowStartingActionMode(ActionMode.Callback callback);
public void onActionModeStarted(ActionMode mode);
public void onActionModeFinished(ActionMode mode);
3)、自定义WindowManager类(内部类LocalWindowManager)。主要修改了addView函数,设置title。
private class LocalWindowManager extends WindowManagerImpl.CompatModeWrapper
WindowManager并不是什么“窗口管理器”,WindowManagerService才是窗口管理器,WindowManager主要管理一堆状态字。WindowManager的LayoutParams子类内容十分丰富。其实WindowManager.java的主要内容就是由这个类定义构成。
LayoutParams如下定义:
public int x;
public int y;
如果忽略gravity属性,那么它表示窗口的x/y绝对位置。当设置了Gravity.LEFT或Gravity.RIGHT之后,x/y值就表示到特定边的距离。
float horizontalWeight float erticalWeight
表示在水平或垂直方向上有多少空间可以放大拉伸的,如果定义0则不能拉伸,其它值则会按比例均给所有的Views。
public int type;
窗口类型:有3种主要类型
Applicationwindows:取值在 FIRST_APPLICATION_WINDOW和LAST_APPLICATION_WINDOW 之间。
是通常的、顶层的应用程序窗口,必须将token设置成activity的token。
Sub_windows:取值在 FIRST_SUB_WINDOW和 LAST_SUB_WINDOW 之间。
与顶层窗口相关联,token必须设置为它所附着的宿主窗口的token。
Systemwindows:取值在 FIRST_SYSTEM_WINDOW和 LAST_SYSTEM_WINDOW 之间。
用于特定的系统功能。它不能用于应用程序,使用时需要特殊权限。
Applicaitonwindows:
public static final int FIRST_APPLICATION_WINDOW = 1; 应用程序窗口
public static final int TYPE_base_APPLICATION = 1; 所有应用基本的应用窗口,所有的其它应用窗口都必须出现在它上面
public static final int TYPE_APPLICATION = 2; 普通应用程序窗口。token必须设置为Activity的token,以指出该窗口属谁
public static final int TYPE_APPLICATION_STARTING = 3;应用启动的特定应用窗口,由系统来使用直到应用显示它自己的窗口
public static final int LAST_APPLICATION_WINDOW = 99; 应用结束窗口
sub_window:
public static final int FIRST_SUB_WINDOW = 1000; 子窗口。子窗口的Z序和坐标空间都依赖于他们的宿主窗口。
public static final int TYPE_APPLICATION_PANEL = FIRST_SUB_WINDOW; 面板窗口,显示于宿主窗口上层。
public static final int TYPE_APPLICATION_MEDIA = FIRST_SUB_WINDOW+1; 媒体窗口,例如视频。显示于宿主窗口下层。
public static final int TYPE_APPLICATION_SUB_PANEL = FIRST_SUB_WINDOW+2; 应用程序窗口的子面板。显示于所有面板窗口的上层。(GUI的一般规律,越“子”越靠上)
public static final int TYPE_APPLICATION_ATTACHED_DIALOG = FIRST_SUB_WINDOW+3; 对话框。类似于面板窗口,绘制类似于顶层窗口,而不是宿主的子窗口。
public static final int TYPE_APPLICATION_MEDIA_OVERLAY = FIRST_SUB_WINDOW+4; 媒体信息。显示在媒体层和程序窗口之间,需要实现透明(半透明)效果。(如显示字幕)
public static final int LAST_SUB_WINDOW = 1999; 子窗口结束窗口。
systemwindow:
public static final int FIRST_SYSTEM_WINDOW = 2000; 系统窗口。非应用程序创建。
public static final int TYPE_STATUS_BAR =FIRST_SYSTEM_WINDOW; 状态栏。只能有一个状态栏;它位于屏幕顶端,其他窗口都位于它下方。
public staticfinal int TYPE_SEARCH_BAR =FIRST_SYSTEM_WINDOW+1; 搜索栏。只能有一个搜索栏;它位于屏幕上方。
public staticfinal int TYPE_PHONE =FIRST_SYSTEM_WINDOW+2; 电话窗口。它用于电话交互(特别是呼入)。它置于所有应用程序之上,状态栏之下。
public staticfinal int TYPE_SYSTEM_alert = FIRST_SYSTEM_WINDOW+3; 系统提示。它总是出现在应用程序窗口之上。
public staticfinal int TYPE_KEYGUARD =FIRST_SYSTEM_WINDOW+4; 锁屏窗口。
public staticfinal int TYPE_TOAST =FIRST_SYSTEM_WINDOW+5; 信息窗口。用于显示toast。
public staticfinal int TYPE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW+6; 系统顶层窗口。显示在其他一切内容之上。此窗口不能获得输入焦点,否则影响锁屏。
public staticfinal int TYPE_PRIORITY_PHONE = FIRST_SYSTEM_WINDOW+7; 电话优先,当锁屏时显示。此窗口不能获得输入焦点,否则影响锁屏。
学习分享,共勉public staticfinal int TYPE_SYSTEM_DIALOG = FIRST_SYSTEM_WINDOW+8; 系统对话框。(例如音量调节框)。
Android高级架构师进阶之路
题外话,我在阿里工作多年,深知技术改革和创新的方向,Android开发以其美观、快速、高效、开放等优势迅速俘获人心,但很多Android兴趣爱好者所需的进阶学习资料确实不太系统,完整。今天我把我搜集和整理的这份学习资料分享给有需要的人,若有关Android学习进阶可以与我在Android终极开发交流群一起讨论交流。 点击这里前往我的Git领取资料 的同时,还可以加入一个好的学习交流圈,何乐而不为呢?加入我们和我们一起吧!!
Android进阶知识体系学习脑图
Android进阶高级工程师学习全套手册
对标Android阿里P7,年薪50w+学习视频
大厂内部Android高频面试题,以及面试经历
交流圈,何乐而不为呢?加入我们和我们一起吧!!
Android进阶知识体系学习脑图
[外链图片转存中…(img-097W6lc4-1643948781428)]
Android进阶高级工程师学习全套手册
[外链图片转存中…(img-cXlbWJVR-1643948781429)]
对标Android阿里P7,年薪50w+学习视频
[外链图片转存中…(img-lOVAKC0z-1643948781429)]
大厂内部Android高频面试题,以及面试经历