android window 与windowManager

下图讲解了Window在调用 windowManager 添加、删除、更新view的内部机制

android window 与windowManager

附window 添加button的一个调用代码:

//window manage
var btntxt = Button([email protected])
btntxt.text = "windows test"
var layoutParams = WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.WRAP_CONTENT,3,0,PixelFormat.TRANSPARENT)
layoutParams.flags =WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
layoutParams.gravity = Gravity.LEFT
layoutParams.x = 100
layoutParams.y = 300
btntxt.layoutParams = layoutParams
val wmManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager

wmManager.addView(btntxt,layoutParams)

其中重要的两个参数layoutParams构造函数中的flag 及type,flag表示接受touchevent的方式,常用的:Flag_NO_FOCUSABLE(此window不接受任何事件)、flag_no_touch_modal(window范围内有触点自己处理,范围之外的底层window处理)、flag_show_when_locked(可以在锁屏界面显示),type 表示window类型(应用window \子window\系统window)