Android中悬浮窗口

调用WindowManager,并设置WindowManager.LayoutParams的相关属性,通过WindowManager的addView方法创建View,这样产生出来的View根据WindowManager.LayoutParams属性不同,效果也就不同了。比如创建系统顶级窗口,实现悬浮窗口效果!
WindowManager的方法很简单,基本用到的就三个addView,removeView,updateViewLayout。
而WindowManager.LayoutParams的属性就多了,非常丰富,具体请查看SDK文档。这里给出Android中的WindowManager.java源码,可以具体看一下。
下面是简单示例代码:
 
[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中添加权限:
[java]
<span><</span>uses<span>-</span>permission android<span>:</span>name<span>=</span><span>"android.permission.SYSTEM_ALERT_WINDOW"</span> <span>/></span> 
PS:这里举例说明一下type的值的意思:
[java] 
这个FIRST_SYSTEM_WINDOW的值就是2000。2003和2002的区别就在于2003类型的View比2002类型的还要top,能显示在系统下拉状态栏之上!

注:使用popuwindow来实现悬浮的视频播放器,可实现多开,且让播放器处于最前端,有兴趣的朋友可以自己做一个试试。

作者:hahashui123

时间: 2024-08-04 19:18:35

Android中悬浮窗口的相关文章

Android中为窗口定义主题

在res/values/styles文件夹中定义如下: 1 <style name="myTheme"> 2 <item name="android:windowNoTitle">true</item> 3 <item name="android:windowFullscreen">true</item> 4 <item name="android:windowBackg

Android中View窗口getWidth和getMeasuredWidth的差别

今天在研究自己定义listview的下拉刷新的效果.想移植到项目需求中,再看自己定义源代码时发现了一个问题就是getWidth和getMeasuredWidth两个方法有什么差别,求教万能的百度,经调研发现这两个方法的不同点是,getWidth获得的是当前View的可视的宽度,可是向下拉刷新这种需求,那个头部提示的View是隐藏起来的这样用getWidth就获取不到View的宽度了.所以採取getMeasuredWidth的方式获得. getMeasuredWidth的方法代表了能够获取View

Delphi 悬浮窗口、浮动窗口的实现

源:Delphi 悬浮窗口.浮动窗口的实现 浮动窗体的实现 http://blog.tianya.cn/blogger/post_show.asp?BlogID=68097&PostID=806089 需要一个这样的窗体:a:没有标题栏; b:可以改变大小; c:不在任务栏上显示图标; d:如果不是主窗体,它的最小化不受主窗体的限制; e:在最顶端显示 处理:a:不在任务栏出现的,只要设置窗体的属性为ToolWindow就可以了.b:要想使窗体脱离主窗体的限制,必须修改它的ParentWnd,使

Android中Activity Window View ViewGroup之间的关系

Activity:是Android四大组件之一,用于展示一个与用户交互的界面 ----展示界面 ----与用户交互 Activity相当于控制器,负责调用业务类的方法.简单的业务可以直接在Activity中处理. Activity通过内置是Window对象的setContentView(资源位置.资源类型.资源)方法来展示界面. 用户通过View操作界面. 与用户交互时,通过View来捕获事件,再通过WindowManagerService传递消息(当前操作的控件,事件的类型).Android框

Android中可自由移动悬浮窗口的实现

大家对悬浮窗概念不会陌生,相信每台电脑桌面的右上角都会有这么一个东西,它总是出现在所有页面的顶端(Top Show).但在Android平台中如何实现这样的效果呢?先来看一看效果图. 看见在Google搜索框上面的那个Icon图片了嘛.下面我就来详细介绍一下在Android平台下悬浮窗口的实现,并让它能够随手指的触摸而移动. 一.实现原理及移动思路 调用WindowManager,并设置WindowManager.LayoutParams的相关属性,通过WindowManager的addView

Android 悬浮窗口

一.创建悬浮窗口步骤    1.实现一个ViewGroup类,作为悬浮窗口的界面类,以便在里面重写onInterceptTouchEvent和onTouchEvent方法,实现移动界面的目的.       在本例中实现了一个FloatLayer类,可以作为通用的类,使用时需要传入WindowManager对象以实现移动窗口. // FloatLayer ~ package com.example.hellofloatingwnd; import static com.ahai.util.Debu

Android使用WindowManager实现悬浮窗口

原文地址:http://www.3g-edu.org/news/art027.htm 下面就介绍一下如何通过WindowManager来实现这个效果. 通过WindowManager的addView()方法,并设置WindowManager.LayoutParams的相关属性,就可以往WindowManager中加入所需要的View,而根据WindowManager.LayoutParams属性不同,也就能实现不同的效果.比如创建系统顶级窗口,实现悬浮窗口效果.如果需要将View从WindowM

Android 实现顶层窗口、悬浮窗口

1.如图片1所示,在一个Android应用中,除了标题栏和底层的ActionBar的区域,是我们可以操纵的UI区域,那是不是说我们就不能改变除了这两个区域的UI呢?答案是否定的. 比如现在我们希望把一个View放在窗口的最低端显示,通过hierarchyviewer工具我们可以发现最底层的ActionBar是在TestActivity布局的父窗口中设置的,那么我们想通过setContentView(R.layout.activity_main)在activity_main布局文件中设置就无法实现

android 类似360悬浮窗口实现源码

当我们在手机上安装360安全卫士时,手机屏幕上时刻都会出现一个小浮动窗口,点击该浮动窗口可跳转到安全卫士的操作界面,而且该浮动窗口不受其他activity的覆盖影响仍然可见(多米音乐也有相关的和主界面交互的悬浮小窗口).它能悬浮在手机桌面,且不受Activity界面的影响,说明该悬浮窗口是不隶属于Activity界面的,也就是说,他是隶属于启动它的应用程序所在进程.如360App所在的应用进程,当杀掉它所在的应用进程时,它才会消失.悬浮窗口的实现涉及到WindowManager(基于4.0源码分