关闭

在Android中使用WindowManager实现悬浮窗口

标签: androidWindowManager悬浮窗口
1035人阅读 评论(0) 收藏 举报
分类:

作者:温老师,华清远见嵌入式学院讲师。

最近在做一个项目的过程中,客户提出要一个能悬浮于所有应用的界面。下图右侧这个界面就是需要实现的悬浮于所有应用之上的视图。
下面就介绍一下如何通过WindowManager来实现这个效果。

通过WindowManager的addView()方法,并设置WindowManager.LayoutParams的相关属性,就可以往WindowManager中加入所需要的View,而根据WindowManager.LayoutParams属性不同,也就能实现不同的效果。比如创建系统顶级窗口,实现悬浮窗口效果。如果需要将View从WindowManager中移除,只需要调用removeView()即可。

下面以一个简单的例子来解释一下如何实现悬浮窗口效果。

首先,得到WindoeManager对象:
        WindowManager wManager = getApplicationContext().getSystemService( Context. WINDOW_ SERVICE);

其次,得到WindowManager.LayoutParams对象,为后续设置相关参数做准备:
        private WindowManager.LayoutParams wmParams=new WindowManager.LayoutParams();

接着,设置相关的窗口布局参数,要实现悬浮窗口效果,主要需要设置的参数有:
        wmParams.type = LayoutParams.TYPE_PHONE; // 设置window type
        wmParams.format = PixelFormat.RGBA_8888; // 设置图片格式,效果为背景透明

        /*
        * 下面的flags属性的效果形同“锁定”。 悬浮窗不可触摸,不接受任何事件,同时不影响后面的事件响应。
        */
        wmParams.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL |
        LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_NOT_TOUCHABLE;

wmParams.gravity = Gravity.RIGHT| Gravity. CENTER_VERTICAL; // 调整悬浮窗口至右侧中间
         // 以屏幕左上角为原点,设置x、y初始值
         wmParams.x = 0;
        wmParams.y = 0;

// 设置悬浮窗口长宽数据
        wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;;
         wmParams.height =WindowManager.LayoutParams.WRAP_CONTENT;;

然后,就可以将需要加到悬浮窗口中的View加入到窗口中了:
        if(view.getParent==null)//如果view没有被加入到某个父组件中,则加入WindowManager中
        wManager.addView(view,wmParams);

其中,view为需要放到悬浮窗口中的视图组件。

如果要将其从WindowManager中移除,则可以执行以下语句:
        if(view.getParent()!=null)
        wManager.removeView(view);

最后,还有需要注意的是,如果要用悬浮窗口,需要在AndroidManifest.xml中加入如下的权限:
        <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

0
0
查看评论

Android中使用WindowManager实现悬浮窗口

最近在做一个项目的过程中,客户提出要一个能悬浮于所有应用的界面。下图右侧这个界面就是需要实现的悬浮于所有应用之上的视图。 下面就介绍一下如何通过WindowManager来实现这个效果。 通过WindowManager的addView()方法,并设置WindowManager.Lay...
  • ricefcc
  • ricefcc
  • 2014-11-21 19:16
  • 2425

Android 使用WindowManager实现悬浮窗及源码解析

本文已授权微信公众号《鸿洋》原创首发,转载请务必注明出处。 一个Activity、一个Service和两个布局文件。布局十分简单,这里就不贴了,大概描述下。activity_main.xml中俩按钮,layout_window.xml中一个TextView。ok,首先看下MainActivity。M...
  • qq_17250009
  • qq_17250009
  • 2016-10-24 09:18
  • 5850

利用Window和WindowManager实现悬浮窗效果——Android开发艺术探索笔记

Window表示一个窗口的概念,在某些特殊的时候,比如你需要在桌面或者锁屏上显示一些类似悬浮窗的东西时候就需要用到Window。Window是一个抽象类,Window的实现类是PhoneWindow。Window的具体实现位于WindowManagerService中,WindowManager和W...
  • L664675249
  • L664675249
  • 2016-03-10 21:02
  • 7736

在Android中使用WindowManager实现悬浮窗口

http://www.embedu.org/Column/Column522.htm http://gundumw100.iteye.com/blog/899977 Android桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果  http://www.verydemo...
  • a75509151
  • a75509151
  • 2013-11-21 10:42
  • 449

Android使用WindowManager在界面添加一个悬浮框

项目中需要在一个service里面显示一个悬浮框,刚开始用一个对话框,但是对话框有背景,而且对话框不好控制,后来使用WindowManger实现需求。 需求是:A项目有一个service用来监听用户说的话;B项目就一个界面,基本设置的 要是实现,B项目界面启动,调用A的service来监听用户说...
  • u011747761
  • u011747761
  • 2015-08-06 18:05
  • 2495

使用WindowManager实现悬浮窗口

1)如果要用悬浮窗口,需要在AndroidManifest.xml中加入如下的权限:           通过WindowManager的addView()方法,并设置WindowManager.LayoutPa...
  • f6991
  • f6991
  • 2013-04-19 16:15
  • 338

android WindowManager实现悬浮窗口

1,用途:     显示在界面底部提示后台的操作进度.比如下载进度. 2,原理:     (1)将提示界面以TYPE_SYSTEM_ALERT,TYPE_SYSTEM_OVERLAY的形式加入到WindowManager中,从而实现全...
  • wenping1980
  • wenping1980
  • 2012-10-22 19:40
  • 833

Android的WindowManager实现悬浮窗口

Android的WindowManager是一个系统的服务,这是负责管理z-ordered列表窗口,以及它们是如何被放在屏幕上。另外,当打开或关闭应用程序或旋转屏幕,它会自动执行窗口转换和动画。  每个Activity都有一个window,用于在屏幕上显示其内容。当你在Activity调...
  • dong_18383219470
  • dong_18383219470
  • 2017-02-09 13:22
  • 103

Android WindowManager悬浮窗:不需要申请权限实现悬浮

Android WindowManager悬浮窗:不需要申请权限实现悬浮附录文章1介绍了Android平台上的悬浮窗WindowManager,WindowManager悬浮窗可以悬浮在Android设备上的桌面窗口之上,但是WindowManager的使用,必须先申请权限,在一些定制的Andr...
  • zhangphil
  • zhangphil
  • 2016-08-26 18:30
  • 10305

【Android】WindowManager悬浮窗口 分析和示例

悬浮窗口的实现涉及到WindowManager(基于4.0源码分析),它是一个接口,实现类有WindowManagerImpl,CompatModeWrapper(WindowManagerImpl的内部类),LocalWindowManager(Window的内部类),它们之间的关系如下图的类图:...
  • Linh47
  • Linh47
  • 2016-09-06 11:36
  • 964
    个人资料
    • 访问:222565次
    • 积分:2780
    • 等级:
    • 排名:第15235名
    • 原创:19篇
    • 转载:228篇
    • 译文:0篇
    • 评论:9条
    最新评论