`

Android中悬浮窗口的实现原理和示例代码(转)

 
阅读更多
用了我一个周末的时间,个中愤懑就不说了,就这个问题,我翻遍全球网络没有一篇像样的资料,现在将实现原理简单叙述如下:

调用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,参加这里。
分享到:
评论
1 楼 geizei1777 2011-11-25  
学习了

相关推荐

    Android中悬浮窗口的实现原理和示例代码

    ### Android中悬浮窗口的实现原理和示例代码 在Android开发过程中,有时我们需要实现一个能够悬浮于所有应用程序之上的窗口,比如悬浮按钮、悬浮菜单等。这类功能在很多场景下非常实用,例如在多任务处理时提供快速...

    Android视频悬浮窗口实现的示例代码

    本文例子实现了点击显示悬浮窗口,同时窗口可播放视频,拖动位置,点击关闭及返回 APP 页面,通过例子来讲述悬浮窗口实现原理及细节处理,效果图如下所示: 悬浮窗口.gif 原理  WindowManager 对 View 视图进行添加...

    Android中悬浮窗口的实现原理实例分析

    本文将深入探讨Android悬浮窗口的实现原理,并通过实例代码进行详细解析。 首先,实现悬浮窗口的核心在于使用`WindowManager`服务和`WindowManager.LayoutParams`类。`WindowManager`是Android系统提供的接口,用于...

    Android悬浮窗口

    本课件资料将深入探讨Android悬浮窗口的实现原理和应用。 首先,我们要理解Android悬浮窗口的工作机制。悬浮窗口是通过使用`SYSTEM_ALERT_WINDOW`权限来实现的。这个权限允许应用在任何其他应用之上显示内容,包括...

    android悬浮窗口开发demo.zip

    在本示例"android悬浮窗口开发demo.zip"中,开发者提供了一个在Android 9(Pie)系统上运行的测试案例,以展示如何实现这一功能。下面将详细解释悬浮窗口的开发原理和步骤,以及可能涉及的关键知识点。 首先,要...

    android实现桌面移动悬浮窗口

    现在很多应用都有这样的功能,比如360等安全卫士,手机管家之内的应用。...然后通过覆写悬浮View中onTouchEvent方法来改变windowMananager.LayoutParams中x和y的值来实现自由移动悬浮窗口。 二、示例代码 先看看悬浮Vi

    Android浮动窗口demo

    总结来说,"Android浮动窗口demo"提供了一个实现悬浮窗功能的示例,通过创建Service、设置布局、处理权限以及控制显示和关闭,展示了如何在Android应用中实现实时网速显示或其他类似功能的悬浮窗口。这个示例对于...

    android demo,悬浮框的实现源代码。

    通过分析这个Demo,我们可以深入理解Android悬浮窗的工作原理和实现方式。 首先,悬浮框的实现主要依赖于`SYSTEM_ALERT_WINDOW`权限。在AndroidManifest.xml文件中,你需要添加以下权限: ```xml ...

    Android悬浮窗菜单

    总之,创建一个在Android 6.0及以上版本中正常工作的悬浮窗菜单,开发者不仅需要理解悬浮窗的工作原理,还要熟悉运行时权限的管理机制。通过合理的代码设计和用户交互,可以为用户提供一个既实用又安全的悬浮窗功能...

    android 悬浮窗

    在实际开发中,`memFloat`可能是一个实现悬浮窗功能的库或者示例项目,它可能会提供更方便的API和示例代码,帮助开发者快速实现悬浮窗功能。学习和理解这些知识点,有助于你构建出具有悬浮窗功能的高质量Android应用...

    Android应用源码之android 悬浮窗-IT计算机-毕业设计.zip

    本资源是一个针对Android悬浮窗功能的毕业设计示例,适用于学生进行学习和实践。 首先,我们来详细了解Android悬浮窗的工作原理。在Android系统中,悬浮窗主要通过`WindowManager`服务来实现。开发者需要创建一个...

    Android应用源码之android 悬浮窗.zip

    本资源“Android应用源码之android 悬浮窗.zip”包含了一个实现Android悬浮窗功能的源代码示例,这对于Android开发者来说是一个学习和实践的好材料。 首先,我们要了解在Android中实现悬浮窗的核心概念和技术。...

    Android悬浮窗demo

    下面将详细探讨Android悬浮窗的实现原理、相关API以及如何创建一个简单的悬浮窗Demo。 首先,Android悬浮窗的核心在于`SYSTEM_ALERT_WINDOW`权限。在AndroidManifest.xml文件中,你需要添加以下权限: ```xml ...

    android悬浮窗demo

    这个"android悬浮窗demo"就是一个示例,帮助开发者理解和实现这种功能。 悬浮窗的核心在于`SYSTEM_ALERT_WINDOW`权限,这是Android系统提供的特殊权限,允许应用在其他应用之上显示窗口。在Android 6.0(API级别23...

    Android 视频浮动窗口源码.zip

    在Android开发中,实现视频浮动窗口(又称为悬浮窗或小窗口)是一项有趣且实用的技术。这通常涉及到在用户界面的任何位置展示一个小型的视频播放器,即使用户在使用其他应用时,视频也能继续播放。这样的功能常见于...

    android 悬浮窗-IT计算机-毕业设计.zip

    总之,这个压缩包中的源码示例为理解和实践Android悬浮窗提供了很好的起点,适合计算机专业的学生作为毕业设计或论文的研究对象,进一步提升在App移动开发领域的技能。通过深入学习和实践,不仅可以掌握悬浮窗的实现...

Global site tag (gtag.js) - Google Analytics