WindowManager的addView的使用

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);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容