iPhone有个很好用的白色圆点,今天就来研究下Android中的悬浮框,这里主要是实现一个快捷键的功能,当然也可以在悬浮框中做想做的事!

悬浮窗的实现主要是通过WindowManager实现,当然WindowManager只是一个接口,想了解源码的同志们可以去看WindowManagerImpl,悬浮框主要是通过WindowManager中的addView,updateView,removeView实现。

WindowManager.LayoutParams这个类用于提供悬浮窗所需的参数。

WindowManager.LayoutParams参数说明:

• type 用于确定悬浮窗的类型(window类型,window有三种类型,应用window,子window,系统window,其中悬浮窗中使用的是系统window),一般使用TYPE_PHONE,表示在所有应用程序之上,状态栏之下,当然这里还提供了很多类型,TYPE_STATUS_BAR(状态栏)TYPE_SEARCH_BAR(搜索框)TYPE_SYSTEM_ALERT(系统提示框,例如电量很低时提示)等等,有很多,根据需求去选择

• flags 用于确定悬浮窗的行为,FLAG_NOT_FOCUSABLE(window不需要获得焦点,也不需要接收各种输入事件)FLAG_NOT_TOUCHABLE(不可点击)FLAG_NOT_TOUCH_MODAL(系统会通过当前window区域以外的单击事件传递给底层的window,当前window区域以内的单击事件则自己处理)FLAG_SHOW_WHEN_LOCKED(显示在锁屏的界面上)等等

• gravity 用于确定悬浮窗的对齐方式

• x 用于确定悬浮窗的横坐标

• y 用于确定悬浮窗的纵坐标

• width 值用于指定悬浮窗的宽度

• height 值用于指定悬浮窗的高度

了解这些参数基本就能创建一个悬浮框了

Java代码privatevoidcreateFloatView() {

mWindowManager = (WindowManager) getApplication().getSystemService(getApplication().WINDOW_SERVICE);

wmParams = newWindowManager.LayoutParams();

wmParams.type = WindowManager.LayoutParams.TYPE_PHONE;

wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;

wmParams.gravity = Gravity.LEFT | Gravity.TOP;

wmParams.x = 100;

wmParams.y = 100;

wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;

wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;

LayoutInflater inflater = LayoutInflater.from(getApplication());

mFloatLayout = (LinearLayout) inflater.inflate(R.layout.layout_float_window, null);

mWindowManager.addView(mFloatLayout, wmParams);

mFloatView = (ImageView) mFloatLayout.findViewById(R.id.img_float_window);

mFloatView.setOnTouchListener(newView.OnTouchListener() {

@Override

publicbooleanonTouch(View v, MotionEvent event) {

wmParams.x = (int) event.getRawX() - mFloatView.getMeasuredWidth() /2;

wmParams.y = (int) event.getRawY() - mFloatView.getMeasuredHeight() /2-25;

mWindowManager.updateViewLayout(mFloatLayout, wmParams);

returnfalse;

}

});

mFloatView.setOnClickListener(newView.OnClickListener() {

@Override

publicvoidonClick(View v) {

Intent intent = newIntent(FloatWindowService.this, SearchActivity.class);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

getApplication().startActivity(intent);

}

});

}

Java代码if(mFloatLayout !=null) {

mWindowManager.removeView(mFloatLayout);

}

以上就是悬浮框的过程,当然使用系统window必须要申请权限:

XML/HTML代码

通过上面这个过程知道了如何通过WindowManager创建悬浮框

下面给你一个Demo,其中有两个悬浮窗,第一个悬浮窗就是普通的悬浮窗,第二个悬浮窗加了一些判断,可以直接在app中使用,这个悬浮窗在桌面和你自己的app中显示

2015年12月21日

android悬浮窗工具,Android悬浮窗实例相关推荐

  1. Android Gradle 构建工具(Android Gradle Build Tools)是什么?

    转载地址:http://mrfu.me/android/2015/07/17/New_Android_Gradle_Build_Tools/ 译者地址:[翻]一览新的 Android Gradle 构 ...

  2. android闹钟测试工具,android开发:AlarmManager闹钟管理器的实例

    1.AlarmManager,顾名思义,就是"提醒",是Android中常用的一种系统级别的提示服务,在特定的时刻为我们广播一个指定的PendingIntent.通俗点,就是设置一 ...

  3. android 微信检测工具,Android 如何测试微信小游戏小程序?

    "微信小游戏性能评测标准建立的初衷是希望能引导开发者优化相关性能数据,提升用户体验.评测标准根据小游戏整体的性能数据表现.玩家体验评价,结合操作系统.机型分档.网络条件等多种维度建立.&qu ...

  4. android 开发小工具,Android 开发者必备的八款小工具

    在做Android 开发过程中,会遇到一些小的问题,虽然自己动手也能解决,但是有了一些小工具,解决这些问题就得心应手了,今天就为大家推荐一些Android 开发必备的小工具. Android Pixe ...

  5. android app性能测试工具,Android 性能测试 - 内存

    1.内存了解 在Android App的性能优化的各个部分里,内存方面的知识较多且不易理解,内存的问题绝对是最令人头疼的一部分,需要对内存基础知识.内存分配.内存管理机制等非常熟悉,才能排查题. 1. ...

  6. 测试android兼容性测试工具,Android兼容性测试工具Spoon

    android分布式测试工具. 简介 android众多的版本和机型给android app测试工作带来不小的挑战.Spoon通过将case分布式地执行.将执行结果更友好地展示出来,从而简化andro ...

  7. android 单位转换工具,Android单位转换工具类

    Android单位转换工具类 Android单位转换工具类主要由以下4部分构成 1.这个类不能被初始化 2.dip转px接口 3.sp转px接口 4.px转dip接口 代码如下: import and ...

  8. android 新开发工具,Android开发人员必备的10个开发工具

    Android SDK 本身包含很多帮助开发人员设计.开发.测试和发布 Android 应用的工具,在本文中,我们将讨论 10 个最常用的工具. 1. Eclipse ADT Eclipse ADT  ...

  9. Android集成开发工具——Android Studio

    Android Studio 是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA. 类似Eclipse ADT,Android Studio 提供了集成的 Android 开发 ...

  10. android pdf阅读工具,android pdf 阅读器开发, pdf demo, pdf第三方控件

    Activity调用的方法 public class PDFActivity extends Activity implements OnPageChangeListener { public sta ...

最新文章

  1. Abiword 编辑事件设计
  2. vscode安装本地服务器_VS Code安装和远程服务器连接配置
  3. (急聘) 高级软件工程师(C#.Net/JS) http://job.cnblogs.com/offer/8966/
  4. [GXOI/GZOI2019]旧词——树链剖分+线段树
  5. k52zip shell band 流氓软件总是显示~
  6. 拼多多再次超越京东:盘中市值一度超700亿美金
  7. php redis 签到,基于Redis位图实现用户签到功能
  8. [Jquery Plugin]Jquery Tabs 插件简介-更友好地组织你的页面 (转)
  9. iOS NSMutableURLRequest 上传图片
  10. 捕捉动物游戏java代码_Java Swing打猎射击游戏源码
  11. 体验Unity2017.2.0f3进行Vuforia开发
  12. godot 编译失败
  13. ubuntu系统鼠标右键没有新建文档的解决方案
  14. 使用freemarker导出word含图片
  15. PostgreSQL 配置文件 postgresql.conf 及 postgresql.auto.conf
  16. 小米全系列手机 刷机总贴
  17. 你不一定知道这个用 Python 快速设置 Excel 表格边框的技巧
  18. 学习 第3章:专项练习之一
  19. nvme命令中prp_Linux nvme驱动分析之块设备层
  20. matlab小端模式合并,大端方式和小端模式【YC】

热门文章

  1. HDU 6602 Longest Subarray (线段树)
  2. 4.2 优化数据访问
  3. 最短路+状压DP【洛谷P3489】 [POI2009]WIE-Hexer
  4. 基于Flex的MapGIS web开发——Flex中显示矢量地图(控件)
  5. HTTP协议及POST与GET操作差异,C#中如何使用POST、GET等
  6. 应用jQuery实现表格数据的动态添加与统计
  7. 学术 | 如何写一篇学术论文?(下)
  8. pytorch 实现Gradient Flipping 各种坑
  9. 机器学习十大经典算法——逻辑回归
  10. 谷歌高频面试题-较小的三数之和