android 悬浮窗 代码,引用


在Android开发中,悬浮窗(通常称为Float Window或系统悬浮窗)是一种可以在用户界面上自由移动、大小可调整的小窗口,常用于实现如聊天泡泡、屏幕录制提示等应用功能。本教程将深入讲解如何在Android中创建和管理悬浮窗,并通过实例`360FloatWindowDemo`来展示具体实现步骤。 我们需要理解Android系统对悬浮窗的权限管理。自Android 6.0(API级别23)开始,应用必须在运行时请求`SYSTEM_ALERT_WINDOW`权限,这可以通过在`AndroidManifest.xml`中添加以下权限并处理运行时权限请求来实现: ```xml <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> ``` 在Android 7.0(API级别24)及以上版本,悬浮窗还需要遵循`TYPE_APPLICATION_OVERLAY`类型的窗口层级管理。在创建悬浮窗时,需要设置`WindowManager.LayoutParams`的类型为`TYPE_APPLICATION_OVERLAY`。 接下来,我们创建悬浮窗的核心类`FloatWindow`。这个类需要包含初始化悬浮窗、显示悬浮窗、隐藏悬浮窗以及处理触摸事件的方法。以下是一个简单的实现: ```java public class FloatWindow { private Context context; private WindowManager windowManager; private View floatView; private WindowManager.LayoutParams layoutParams; public FloatWindow(Context context) { this.context = context; windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); initFloatView(); } private void initFloatView() { // 创建一个LinearLayout作为悬浮窗的根布局 floatView = new LinearLayout(context); // 设置布局参数 layoutParams = new WindowManager.LayoutParams(); layoutParams.type = Build.VERSION.SDK_INT >= 24 ? WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY : WindowManager.LayoutParams.TYPE_PHONE; layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; layoutParams.width = ViewGroup.LayoutParams.WRAP_CONTENT; layoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT; layoutParams.format = PixelFormat.TRANSLUCENT; layoutParams.gravity = Gravity.TOP | Gravity.LEFT; // 初始位置 } public void showFloatWindow() { if (floatView != null) { windowManager.addView(floatView, layoutParams); } } public void hideFloatWindow() { if (floatView != null) { windowManager.removeView(floatView); } } // 添加触摸事件监听,处理拖动和点击事件 private void setupTouchListener() { floatView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 记录按下时的坐标 downX = event.getRawX(); downY = event.getRawY(); break; case MotionEvent.ACTION_UP: // 处理点击事件 break; case MotionEvent.ACTION_MOVE: // 计算移动距离并更新位置 float moveX = event.getRawX(); float moveY = event.getRawY(); int dx = (int) (moveX - downX); int dy = (int) (moveY - downY); layoutParams.x += dx; layoutParams.y += dy; windowManager.updateViewLayout(floatView, layoutParams); break; } return true; } }); } } ``` 在`360FloatWindowDemo`项目中,你可以找到一个完整的例子,包括如何在主活动中创建和显示悬浮窗。该项目的`MainActivity`会实例化`FloatWindow`类,并在用户触发特定操作时调用`showFloatWindow`和`hideFloatWindow`方法。 别忘了处理运行时权限。在Android 6.0及更高版本中,你需要在运行时检查并请求`SYSTEM_ALERT_WINDOW`权限,这通常在`MainActivity`的`onCreate`方法中进行: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.SYSTEM_ALERT_WINDOW) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SYSTEM_ALERT_WINDOW}, REQUEST_CODE_FLOAT_WINDOW); } ``` 在`onRequestPermissionsResult`方法中,检查权限是否被授予,并根据结果决定是否显示悬浮窗。 总结,创建Android悬浮窗涉及到权限申请、窗口管理参数设置、视图创建以及触摸事件处理等多个方面。通过`360FloatWindowDemo`示例,你可以了解并实践这些知识点,从而在自己的应用中实现类似的功能。




























































































































- 1


- 粉丝: 56
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 工程项目管理方法的核心方法.docx
- 计算机网络技术与应用试题库.doc
- 计算机三级(网络技术)笔试275.pdf
- 电子商务产业园项目可行性研究报告.doc
- 基于YOLOv8深度学习的磁瓦表面缺陷自动化检测:实验结果与效率分析 · YOLOv8 v2.1
- 计算机网络专业学生实习报告范文.doc
- 情侣装网络营销策划方案样本.doc
- 医药电商市场现状和发展态势互联网事业部培训.ppt
- 基于HTML5的响应式网站的设计与实现论文正文.docx
- 会展策划第七章第一节会展项目管理的基本理论ppt课件.ppt
- 系统集成项目管理工程师复习小结.doc
- 内河水运建设项目管理指标体系及信息系统开发设想.doc
- 因特网信息交流与网络安全教学设计(整理).pdf
- 虚拟化项目验收报告模板.docx
- 最新国家开放大学电大《优秀广告作品评析(专)》网络核心课形考网考作业及答案.pdf
- 综合布线设计的若干要点.pptx


