https://blog.csdn.net/Love667767/article/details/105735008
WindowManager
Window 的类型有很多种,总的来说分为三大类型,分别是 Application Window(应用程序窗口) 、Sub Window (子窗口)、 System Window (系统窗口)。
窗口类型 | Type 值 |
---|---|
应用程序窗口 | 1 ~ 99 |
子窗口 | 1000 ~ 1999 |
系统窗口 | 2000 ~ 2999 |
在一般情况下, Type 值越大则 Z-Oder 排序越靠前,就越靠近用户。
一、使用WindowManager
实现悬浮窗
实例:
WindowManager mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams = new WindowManager.LayoutParams();
View mView = LayoutInflater.from(mContext).inflate(R.layout.pop_message_view, null);
//设置图片格式,效果为背景透明
mLayoutParams.format = PixelFormat.RGBA_8888;
//悬浮窗位置
mLayoutParams.x = 768;
mLayoutParams.y = 100;
//悬浮窗大小
mLayoutParams.width = 1026;
mLayoutParams.height = 400;
//悬浮窗起始位置
mLayoutParams.gravity = Gravity.TOP | Gravity.LEFT;
//悬浮窗口类型
mLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
mLayoutParams.flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
//悬浮窗动画
mLayoutParams.windowAnimations = R.style.toast_anim_view;
mWindowManager.addView(mView, mLayoutParams);
注意事项:
1、WindowManager
设置位置x,y生效的前提:设置LayoutParams.gravity
2、WindowManager
要设置宽高
3、WindowManager
的view布局最外层不能设置marchParent
会导致位置属性不生效
4、在AndroidManifest.xml
内添加权限<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
二、WindowManager
主要使用方法
//添加视图
public void addView(View view, ViewGroup.LayoutParams params);
//更新视图
public void updateViewLayout(View view, ViewGroup.LayoutParams params);
//移除视图
public void removeView(View view);