android 浮窗例子源码
在Android开发中,浮窗(通常称为悬浮窗或者系统通知)是一种常见的功能,它可以在用户与其他应用交互的同时显示额外的信息或提供便捷的操作入口。本文将深入解析“android 浮窗例子源码”,主要关注`WindowManager`和`WindowManager.LayoutParams`的使用,以及如何创建并实现一个`FloatViewDemo`。 `WindowManager`是Android系统提供的接口,用于管理窗口(Windows)。它允许开发者将视图添加到系统的窗口层次结构中,包括浮动窗口。在实际开发中,我们通常通过Context的getSystemService方法获取到`WindowManager`实例: ```java WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); ``` 接着,`WindowManager.LayoutParams`是配置窗口参数的类,它包含了窗口的布局属性、大小、位置等信息。例如,我们可以通过设置`LayoutParams.TYPE_SYSTEM_ALERT`来创建一个具有系统警告级别的浮窗,这样即使在其他应用上层也会显示: ```java WindowManager.LayoutParams params = new WindowManager.LayoutParams(); params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; ``` 此外,`LayoutParams`还有其他重要的字段,如`flags`(标志位)、`gravity`(重力)和`width`、`height`(宽高)。例如,我们可以设置`FLAG_NOT_FOCUSABLE`使得浮窗不获取焦点,或者设置`gravity`为`Gravity.TOP|Gravity.LEFT`让浮窗出现在屏幕左上角。 接下来,我们来构建`FloatViewDemo`。一个简单的浮窗实现步骤如下: 1. 创建一个自定义的View,例如`FloatView`,在这个View中绘制你需要展示的内容。 2. 在`FloatViewDemo`的活动中,初始化`WindowManager`和`WindowManager.LayoutParams`。 3. 将`FloatView`实例设置为`LayoutParams`的`view`,然后调用`windowManager.addView(floatView, params)`来添加浮窗。 4. 添加必要的监听器,比如触摸事件监听器,以便处理浮窗的拖动和点击事件。 下面是一个简单的`FloatViewDemo`实现示例: ```java public class FloatViewDemo extends AppCompatActivity { private WindowManager windowManager; private FloatView floatView; private WindowManager.LayoutParams layoutParams; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initFloatView(); addViewToWindow(); } private void initFloatView() { floatView = new FloatView(this); layoutParams = new WindowManager.LayoutParams(); layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; layoutParams.gravity = Gravity.TOP | Gravity.LEFT; layoutParams.width = 200; // 设置浮窗宽度 layoutParams.height = 100; // 设置浮窗高度 } private void addViewToWindow() { windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); windowManager.addView(floatView, layoutParams); } } ``` 在`FloatView`类中,你可以自定义绘制内容,以及处理触摸事件,如移动和关闭浮窗: ```java public class FloatView extends View { private int x, y; public FloatView(Context context) { super(context); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: x = (int) event.getX(); y = (int) event.getY(); break; case MotionEvent.ACTION_MOVE: int dx = (int) (event.getX() - x); int dy = (int) (event.getY() - y); layoutParams.x += dx; layoutParams.y += dy; windowManager.updateViewLayout(this, layoutParams); break; case MotionEvent.ACTION_UP: // 处理浮窗的点击或关闭操作 break; } return true; } } ``` 这个简单的`FloatViewDemo`就实现了浮窗的基本功能,但实际应用中可能需要处理更多复杂情况,比如权限申请、浮窗生命周期管理、动态改变浮窗大小和形状等。在进行浮窗开发时,需要注意尊重用户隐私,遵循Android的设计原则,确保浮窗的用户体验良好且不会干扰正常操作。
- 1
- 粉丝: 49
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
- 1
- 2
- 3
前往页