Android--Service中添加 浮动 View

本文介绍了如何在Android Service中创建并管理悬浮窗,包括添加、更新和移除View。通过WindowManager类及其方法,实现浮动窗口的交互和位置更新,并讨论了如何限制悬浮窗仅在Launcher界面显示的技术思路。
摘要由CSDN通过智能技术生成

一般构建UI的时候都是通过Actvity.setContentView(R.layout.main) 来实现的,其等价于Activity.getWindow().setContentView(LayoutInflater.from(this).inflate(R.layout.main, null)). 也就是说用户界面必须有Activity 和 windowManager共同参与,但是像 StatusBar LockScreen都是在service中 直接创建view 并添加到windowManager中显示的。


上图中的这个笑脸就是一个浮动的视图,它可以响应用户的点击和拖动事件。Android中浮动窗口的实现主要是靠WindowManager这个类。通过WindowManager类的addView(),updateViewLayout(),removeView()这几个方法,我们可以直接在Window中添加,更新,移除View。 
浮动窗口实现的具体步骤 
    毫无疑问,我们得先拿到WindowManger对象。考虑到浮动窗口通常在应用程序退出后依然显示,所以我们需要在Service中实现浮动窗口的添加和更新,当然别忘了提供给用户一个取消浮动窗口的功能。
    定义你要显示的View。可以在布局文件中定义,也可以自定义视图。
    设置必要的参数,其中有几个比较重要的参数需要设置,具体请参考下面的代码。
    将View添加到Window中,接收并处理事件,更新View。
    在Manifest中加入对应的权限。<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 

浮动窗口实现代码 

[java]  view plain copy
  1. package com.spreadst.floatwindow;  
  2. import android.app.Service;  
  3. import android.content.Context;  
  4. import android.content.Intent;  
  5. import android.graphics.PixelFormat;  
  6. import android.os.IBinder;  
  7. import android.util.Log;  
  8. import android.view.Gravity;  
  9. import android.view.LayoutInflater;  
  10. import android.view.MotionEvent;  
  11. import android.view.View;  
  12. import android.view.WindowManager;  
  13. public class FloatWindowService extends Service {  
  14.    private WindowManager mWindowManager;  
  15.    private WindowManager.LayoutParams mLayoutParams;  
  16.    private LayoutInflater mLayoutInflater;  
  17.    private View mFloatView;  
  18.    private int mCurrentX;  
  19.    private 
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值