WindowsManager 窗口管理器

WindowsManager

WindowManager 是 Android 系统中的一个重要组件,它是外界访问 Window 的入口。
WindowManager 是一个接口类,继承自接口 ViewManager ,它是用来管理 Window 的。

ViewManager 接口中有以下方法:

  • public void addView(View view, ViewGroup.LayoutParams params);
  • public void updateViewLayout(View view, ViewGroup.LayoutParams params);
  • public void removeView(View view);

getSystemService 得到 WindowManager 对象

private val mWindowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager

addView 添加 removeView 移除

public void addView(View view, ViewGroup.LayoutParams params);
将 view 添加到 Window 上面,并设置其布局参数

如果需要给弹窗添加移动等动画效果,使用一个父容器包裹 view ,再给 view 添加动画,将该容器一起添加给 WindowsManager
再做完动画效果之后再销毁该父容器

1
2
3
4
5
rootContainer.addView(mView)
mWindowManager.addView(rootContainer,lp)

//移除
mWindowManager.removeView(rootContainer)

布局参数

//控件的布局参数
type:
val lp = WindowsManager.LayoutParams(w,h,type,flags,format)

(1)TYPE_ 类型:
TYPE_APPLICATION_PANEL 顶层视图(panel覆盖)
TYPE_APPLICATION
TYPE_APPLICATION_OVERLAY 播放的时候退出来,悬浮窗
TYPE_APPLICATION_ATTACHED_DIALOG
TYPE_ACCESSIBILITY_OVERLAY
TYPE_APPLICATION_MEDIA
TYPE_APPLICATION_STARTING
TYPE_APPLICATION_SUB_PANEL
TYPE_BASE_APPLICATION
TYPE_CHANGEDTYPE_DRAWN_APPLICATION

(2)FLAG_ 一些行为:
常用的 WindowManager.LayoutParams 的 Flag 还包括:

  1. FLAG_NOT_FOCUSABLE :指定窗口不可获取焦点,一般用于弹出窗口等辅助性质的窗口。
  • 该标志指定的窗口不会获取焦点,也无法接收触摸事件。
  • 即使窗口弹出在用户界面前方,用户仍然可以继续和下层窗口进行交互。
  • 这通常用于实现一些辅助性质的悬浮窗口,如提示信息、通知、悬浮工具栏等,不影响用户操作主界面。
  1. FLAG_NOT_TOUCH_MODAL :指定窗口在显示时不获取焦点和触摸事件,当前焦点依然停留在原来的位置。
  2. FLAG_DIM_BEHIND :指定窗口后面的内容会被暗淡或半透明化,通常与 FLAG_NOT_FOCUSABLE 标志一起使用,实现窗口弹出时背景模糊的效果。
  3. FLAG_FULLSCREEN :指定窗口为全屏显示,覆盖在状态栏之上,不受其他窗口影响。
  4. FLAG_LAYOUT_IN_SCREEN :指定窗口在整个屏幕中布局,覆盖状态栏和导航栏。通常和 FLAG_FULLSCREEN 一起使用。
  5. FLAG_KEEP_SCREEN_ON :指定窗口保持屏幕常亮状态,不会因为屏幕超时而自动关闭。
  6. FLAG_DISMISS_KEYGUARD :指定窗口可以绕过锁屏界面,出现在锁屏界面之上。

(3)格式:
PixelFormat.TRANSLUCENT 半透明
PixelFormat.OPAQUE 不透明

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2023-2025 Annie
  • Visitors: | Views:

嘿嘿 请我吃小蛋糕吧~

支付宝
微信