addView有什么作用:
使用WindowManager的addView方法可以在屏幕上任何位置添加一个自定义的视图(View),而不仅仅是显示在应用的窗口内。这种方式常用于实现悬浮窗、全屏覆盖广告、或者在游戏或应用中显示系统级通知等。以下是一个简单的示例,展示了如何使用WindowManager来创建一个显示图片的页面。
步骤 1: 获取WindowManagerWindowManager.LayoutParams
首先,你需要在你的Activity或服务中获取WindowManager的实例,并创建一个WindowManager.LayoutParams对象来配置你的视图属性(如位置、大小、类型等)。
步骤 2: 创建自定义的View
接下来,你需要创建一个自定义的View(例如,继承自ImageView的类),并在其中加载你的图片。
步骤 3: 将自定义View添加到WindowManager
最后,使用WindowManager的addView方法将你的自定义View添加到屏幕上。
示例代码
下面是一个简单的示例,展示如何完成上述步骤:
// 1、创建WindowManager和WindowManager.LayoutParams
WindowManager mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams mWindowLayoutParams = new WindowManager.LayoutParams();
// 2、设置WindowLayoutParams的一些属性
// 安卓8.0之后需要使用TYPE_APPLICATION_OVERLAY
mWindowLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
mWindowLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;//宽度全屏宽
mWindowLayoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;//高度全屏高
mWindowLayoutParams.format = PixelFormat.RGBA_8888;//设置窗口背景色透明
//给Window设置Flag 作用:状态栏透明、可以接收返回键
mWindowLayoutParams.flags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
mWindowLayoutParams.gravity = Gravity.CENTER; // 可以根据需要调整位置
// 3、要显示页面的布局
ImageView mView = new ImageView(mContext);
mView.setImageResource(R.drawable.ic_launcher_background);
mView.setScaleType(ImageView.ScaleType.FIT_XY);
// 4、显示图片view
mWindowManager.addView(mView, mWindowLayoutParams);
// 5、删除图片view,通常在onDestroy调用
mWindowManager.removeView(mView);