Android中悬浮窗口的实现原理和示例代码-程序员宅基地

技术标签: java  移动开发  

调用WindowManager,并设置WindowManager.LayoutParams的相关属性,通过WindowManager的addView方法创建View,这样产生出来的View根据WindowManager.LayoutParams属性不同,效果也就不同了。比如创建系统顶级窗口,实现悬浮窗口效果!

WindowManager的方法很简单,基本用到的就三个addView,removeView,updateViewLayout。

而WindowManager.LayoutParams的属性就多了,非常丰富,具体请查看SDK文档。这里给出Android中的WindowManager.java源码,可以具体看一下。

下面是简单示例代码:

public class myFloatView extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button bb=new Button(getApplicationContext());
        WindowManager wm=(WindowManager)getApplicationContext().getSystemService("window");
        WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();

        /**
         *以下都是WindowManager.LayoutParams的相关属性
         * 具体用途请参考SDK文档
         */
        wmParams.type=2002;   //这里是关键,你也可以试试2003
        wmParams.format=1;
         /**
         *这里的flags也很关键
         *代码实际是wmParams.flags |= FLAG_NOT_FOCUSABLE;
         *40的由来是wmParams的默认属性(32)+ FLAG_NOT_FOCUSABLE(8)
         */
        wmParams.flags=40;
        wmParams.width=40;
        wmParams.height=40;
        wm.addView(bb, wmParams);  //创建View
    }
}
别忘了在AndroidManifest.xml中添加权限:

PS:这里举例说明一下type的值的意思:

        /**
         * Window type: phone.  These are non-application windows providing
         * user interaction with the phone (in particular incoming calls).
         * These windows are normally placed above all applications, but behind
         * the status bar.
         */
        public static final int TYPE_PHONE              = FIRST_SYSTEM_WINDOW+2;

        /**
         * Window type: system window, such as low power alert. These windows
         * are always on top of application windows.
         */
        public static final int TYPE_SYSTEM_ALERT       = FIRST_SYSTEM_WINDOW+3;
这个FIRST_SYSTEM_WINDOW的值就是2000。2003和2002的区别就在于2003类型的View比2002类型的还要top,能显示在系统下拉状态栏之上!

————————————————————————————-

已经给出可自由移动悬浮窗口的Demo,参加这里。
复制代码

本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4912232.html,如需转载请自行联系原作者


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33828101/article/details/90102137

智能推荐

第9关:表单元素——文本域_第9关:表单元素——文本域-程序员宅基地

文章浏览阅读291次。表单元素——文本域_第9关:表单元素——文本域

上海人社APP历年社保查询攻略-程序员宅基地

文章浏览阅读2.7k次。随时随地查社保,太方便了,快来收藏起来!!!1、苹果商店或安卓商店下载【上海人社app】2、账号登录,账号:身份证号码 密码:去社保中心开通3、首页,点击CA证书管理4、点击【CA证书申..._上海人社app怎么查社保缴费记录

详解Xcode 7的视图调试_xcode视图-程序员宅基地

文章浏览阅读2.1k次。http://www.cocoachina.com/ios/20150423/11658.html本文由远的风景翻译自raywenderlich,作者:Scott Berrevoets原文:View Debugging in Xcode 6开发者会经常遇到视图或者Auto Layout约束中存在bug的情况,并且这种bug很难通过代码发现,所以开发者很有必要熟知如何进行_xcode视图

vue+h5做的App使用api进行文件的下载自动安装打开_h5+vue实现apk下载并自动打开-程序员宅基地

文章浏览阅读5.1k次。 本人第一次写博客,菜鸟一只,也不大会用语言表述,写博客只是单纯记录下自己遇到的问题,并且记录下来以便日后使用的时候可以有个思路。如果能够帮助到别人就更好了。 现在公司的项目需要用vue做一个安卓app,需要实现app的自动更新功能。我的设计方案就是打开App先提交请求到后台,需要更新会返回下载地址。创建下载的代码: // 下载最新版本 JX_do..._h5+vue实现apk下载并自动打开

JfreeChart将图形输出到jsp页面_jfreechart画图返回给浏览器-程序员宅基地

文章浏览阅读4.3k次。1.web.xml中加入以下配置信息. DisplayChart org.jfree.chart.servlet.DisplayChart DisplayChart /DisplayChart 2.jfreeChart.jsp<%@ page_jfreechart画图返回给浏览器</div>

JQuery 基本选择器-程序员宅基地

文章浏览阅读489次。.imgclass { width:250px; height:250px; } .imgclass1 { width:210px; height:210px; } table tr td { width

随便推点

c#串口编程(傻瓜教程,手把手教你学会)_c# 串口编程-程序员宅基地

文章浏览阅读5.4w次,点赞249次,收藏1.1k次。在单片机项目开发中,上位机也是一个很重要的部分,主要用于数据显示(波形、温度等)、用户控制(LED,继电器等),下位机(单片机)与 上位机之间要进行数据通信的两种方式都是基于串口的:USB转串口 —— 上位机和下位机通过USB转串口连接线直接相连进行数据交互; 串口转WIFI(ESP8266) —— 上位机和下位机基于TCP/IP协议通过WIFI传输数据; 串口转蓝牙(HC-06)—— 不多用,暂不介绍;上位机软软件开发主要包括以下两种:  1、Windows上位机(EXE可执行程序)._c# 串口编程

VIM插件离线安装与配置(taglist,airliner,gutentags,LeaderF,gtags,AutoComplPop,omnicppcomplete,fzf,Rg)_离线安装vim-程序员宅基地

文章浏览阅读1.7w次,点赞37次,收藏157次。1.VIM 实用插件安装与配置 工欲善其事必先利其器,windows 环境下有诸多好用的 IDE,但在 linux 环境下,可供选择的工具并不多,但是 VIM 作为一款可扩展文本编辑工具,配合丰富的功能插件,同样能满足我们的工作需要,甚至由于其强大的可扩展性,我们能够实现更丰富、更强大的编辑支持。下面是我整理的一些比较常用的插件。环境:Ubuntu 16.04VIM:vim 8.x(vim............_离线安装vim

oracle查询trim没有生效,TRIM指令真的生效了吗?TRIMcheck软件帮你查-程序员宅基地

文章浏览阅读444次。拼 命 加 载 中 ...越来越多的玩家已经开始用上了SSD固态硬盘,也感受到了开机如飞的感觉了吧,不过因为使用原理的不同,SSD依然有一些问题很烦人,比如P/E擦写次数有限,越用越慢,恢复SSD性能除了靠主控的GC垃圾回收机制,还可以借助系统的TRIM指令。有关TRIM指令的介绍可以参考我们去年的SSD固态硬盘横评,里面介绍的很详细了。用户可以自行检查TRIM指令开启与否,打开CMD窗口定位到“..._trimcheck

吉林大学软件学院大二上c++课设(黑白框模拟QQ通信——数据库,CS架构,多线程,socket通信)_模拟qq软件,基于多线程编程技术捕捉笔记本摄像头或麦克风实时数据,基于socket-程序员宅基地

文章浏览阅读100次。黑白框模拟QQ通信——数据库,CS架构,多线程,socket通信_模拟qq软件,基于多线程编程技术捕捉笔记本摄像头或麦克风实时数据,基于socket

Docker学习之安装docker-compose命令(采用Python-pip命令安装)_docker compose pip安装-程序员宅基地

文章浏览阅读4.7k次,点赞2次,收藏7次。Docker学习之安装docker-compose命令:采用Python-pip命令安装本机系统环境介绍Docker Compose简介使用Python-pip命令进行安装第一步:环境检查第二步:安装Python-pip第三步:安装docker-compose第四步:检查是否安装成功第五步:通过pip命令卸载docker-compose本机系统环境介绍Ubuntu系统环境介绍介绍Ubunt..._docker compose pip安装

python百度贴吧发帖签到_python 爬虫 百度贴吧签到小工具-程序员宅基地

文章浏览阅读99次。import requests,re,timeheader ={"Cookie":"登陆过账号后的cookie 必须填写","User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"}#访问个人帐号下的贴吧主页..._贴吧签到获取tbs失败