用了我一个周末的时间,个中愤懑就不说了,就这个问题,我翻遍全球网络没有一篇像样的资料,现在将实现原理简单叙述如下:
调用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中添加权限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
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,参加这里。
分享到:
相关推荐
### Android中悬浮窗口的实现原理和示例代码 在Android开发过程中,有时我们需要实现一个能够悬浮于所有应用程序之上的窗口,比如悬浮按钮、悬浮菜单等。这类功能在很多场景下非常实用,例如在多任务处理时提供快速...
本文例子实现了点击显示悬浮窗口,同时窗口可播放视频,拖动位置,点击关闭及返回 APP 页面,通过例子来讲述悬浮窗口实现原理及细节处理,效果图如下所示: 悬浮窗口.gif 原理 WindowManager 对 View 视图进行添加...
本文将深入探讨Android悬浮窗口的实现原理,并通过实例代码进行详细解析。 首先,实现悬浮窗口的核心在于使用`WindowManager`服务和`WindowManager.LayoutParams`类。`WindowManager`是Android系统提供的接口,用于...
本课件资料将深入探讨Android悬浮窗口的实现原理和应用。 首先,我们要理解Android悬浮窗口的工作机制。悬浮窗口是通过使用`SYSTEM_ALERT_WINDOW`权限来实现的。这个权限允许应用在任何其他应用之上显示内容,包括...
在本示例"android悬浮窗口开发demo.zip"中,开发者提供了一个在Android 9(Pie)系统上运行的测试案例,以展示如何实现这一功能。下面将详细解释悬浮窗口的开发原理和步骤,以及可能涉及的关键知识点。 首先,要...
现在很多应用都有这样的功能,比如360等安全卫士,手机管家之内的应用。...然后通过覆写悬浮View中onTouchEvent方法来改变windowMananager.LayoutParams中x和y的值来实现自由移动悬浮窗口。 二、示例代码 先看看悬浮Vi
总结来说,"Android浮动窗口demo"提供了一个实现悬浮窗功能的示例,通过创建Service、设置布局、处理权限以及控制显示和关闭,展示了如何在Android应用中实现实时网速显示或其他类似功能的悬浮窗口。这个示例对于...
通过分析这个Demo,我们可以深入理解Android悬浮窗的工作原理和实现方式。 首先,悬浮框的实现主要依赖于`SYSTEM_ALERT_WINDOW`权限。在AndroidManifest.xml文件中,你需要添加以下权限: ```xml ...
总之,创建一个在Android 6.0及以上版本中正常工作的悬浮窗菜单,开发者不仅需要理解悬浮窗的工作原理,还要熟悉运行时权限的管理机制。通过合理的代码设计和用户交互,可以为用户提供一个既实用又安全的悬浮窗功能...
在实际开发中,`memFloat`可能是一个实现悬浮窗功能的库或者示例项目,它可能会提供更方便的API和示例代码,帮助开发者快速实现悬浮窗功能。学习和理解这些知识点,有助于你构建出具有悬浮窗功能的高质量Android应用...
本资源是一个针对Android悬浮窗功能的毕业设计示例,适用于学生进行学习和实践。 首先,我们来详细了解Android悬浮窗的工作原理。在Android系统中,悬浮窗主要通过`WindowManager`服务来实现。开发者需要创建一个...
本资源“Android应用源码之android 悬浮窗.zip”包含了一个实现Android悬浮窗功能的源代码示例,这对于Android开发者来说是一个学习和实践的好材料。 首先,我们要了解在Android中实现悬浮窗的核心概念和技术。...
下面将详细探讨Android悬浮窗的实现原理、相关API以及如何创建一个简单的悬浮窗Demo。 首先,Android悬浮窗的核心在于`SYSTEM_ALERT_WINDOW`权限。在AndroidManifest.xml文件中,你需要添加以下权限: ```xml ...
这个"android悬浮窗demo"就是一个示例,帮助开发者理解和实现这种功能。 悬浮窗的核心在于`SYSTEM_ALERT_WINDOW`权限,这是Android系统提供的特殊权限,允许应用在其他应用之上显示窗口。在Android 6.0(API级别23...
在Android开发中,实现视频浮动窗口(又称为悬浮窗或小窗口)是一项有趣且实用的技术。这通常涉及到在用户界面的任何位置展示一个小型的视频播放器,即使用户在使用其他应用时,视频也能继续播放。这样的功能常见于...
总之,这个压缩包中的源码示例为理解和实践Android悬浮窗提供了很好的起点,适合计算机专业的学生作为毕业设计或论文的研究对象,进一步提升在App移动开发领域的技能。通过深入学习和实践,不仅可以掌握悬浮窗的实现...