Android进阶-悬浮窗

原创 2015年11月19日 20:24:06

Android进阶-悬浮窗

需求如标题,那么怎么做出这个效果呢? -> 主要依赖WindowManeger

我们使用WindowManeger,也可以把自己定义的一个控件(悬浮窗),可以在其他应用最上层,甚至手机桌面最上层显示窗口。
调用的是WindowManager继承自基类的addView方法和removeView方法来显示和隐藏窗口
悬浮窗口并不受activity的影响,他是隶属于启动它的应用程序所在进程。当进程挂掉,悬浮窗也会挂掉

  1. 每一个WindowManager对象都和一个特定的 Display绑定。
  2. 想要获取一个不同的display的WindowManager,可以用 createDisplayContext(Display)来获取那个display的 Context,、
  3. 之后再使用: Context.getSystemService(Context.WINDOW_SERVICE)来获取WindowManager。

下面代码自定义了一个Toast:
代码要点:
1. 使用WindowManager必须先获得权限: android.permission.SYSTEM_ALERT_WINDOW
2. 代码中获取的getDefaultDisplay(), 可以理解为屏幕
3. params是用来设置我们添加的控件的布局, 可以理解为xml文件中的布局属性
4. 控件的移除可使用removeView方法
5. params.gravity = Gravity.LEFT + Gravity.TOP;// 将重心位置设置为左上方,这样控件在布局时,会以
屏幕的左上角为坐标原点

    /**
     * 自定义归属地浮窗 需要权限android.permission.SYSTEM_ALERT_WINDOW
     */
    private void showToast(String text) {
        mWM = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);

        // 获取屏幕宽高
        winWidth = mWM.getDefaultDisplay().getWidth();
        winHeight = mWM.getDefaultDisplay().getHeight();

        params = new WindowManager.LayoutParams();
        params.height = WindowManager.LayoutParams.WRAP_CONTENT;
        params.width = WindowManager.LayoutParams.WRAP_CONTENT;
        params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
        params.format = PixelFormat.TRANSLUCENT;
        params.type = WindowManager.LayoutParams.TYPE_PHONE;// 电话窗口。它用于电话交互(特别是呼入)。它置于所有应用程序之上,状态栏之下。
        params.gravity = Gravity.LEFT + Gravity.TOP;// 将重心位置设置为左上方,
                                                    // 也就是(0,0)从左上方开始,而不是默认的重心位置
        params.setTitle("Toast");


        TextView tvText = (TextView) view.findViewById(R.id.tv_number);
        tvText.setText(text);

        mWM.addView(view, params);// 将view添加在屏幕上(Window)

    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

Android越过悬浮窗权限显示悬浮窗

文/Shawon(简书作者) 原地址 http://www.jianshu.com/p/167fd5f47d5c ,经验证,此方法可以越过大多数手机的悬浮球权限。 但是对MIUI8无效,MIU...
  • u014137988
  • u014137988
  • 2016年09月18日 17:39
  • 1743

Android 悬浮窗的创建与移除

本文主要是介绍悬浮窗的创建与移除,并能通过点击悬浮窗图标回到应用主界面。本文是通过参考网上的文章并通过自己修改完成的。本文主要参考的文章是:http://blog.csdn.net/guolin_bl...
  • tanghua0809
  • tanghua0809
  • 2015年08月05日 14:11
  • 1531

利用Window和WindowManager实现悬浮窗效果——Android开发艺术探索笔记

Window表示一个窗口的概念,在某些特殊的时候,比如你需要在桌面或者锁屏上显示一些类似悬浮窗的东西时候就需要用到Window。Window是一个抽象类,Window的实现类是PhoneWindow。...
  • L664675249
  • L664675249
  • 2016年03月10日 21:02
  • 7752

Android 8.0 悬浮窗变动与用法

Android 8.0 悬浮窗变动 问题描述:  项目开发中有使用到了悬浮窗,近期在往Android O 系统porting,发现悬浮窗不能正常使用,运行出错:   android.view...
  • mai763727999
  • mai763727999
  • 2018年01月05日 17:11
  • 1057

Android6.0 悬浮窗权限申请

Android6.0中有部分权限需要特殊申请  悬浮窗权限申请: 1、在清单文件中 android:name="android.permission.SYSTEM_ALERT_WINDOW"...
  • zhangyong7112
  • zhangyong7112
  • 2017年02月14日 13:01
  • 701

Android 悬浮窗权限问题解决

前段时间,项目需要做一个类似于360加速器的东西,Android机型这么多,好多手机都把这个权限给默认关闭掉了,处理这个问题真的好麻烦,不过最后还是解决了这个问题。 接下来我将和大家分享下我是怎么解...
  • xuanwozhao
  • xuanwozhao
  • 2015年10月23日 19:56
  • 8734

教你如何在Android 6.0上创建系统悬浮窗

转自郭林的微信公众号 今天周二,又该跟大家分享由我执笔的文章了。从之前我写的deep links、通知栏微技巧这两篇文章中,大家应该能明显体会出什么叫短小精炼,但又很有技术价值的文章。后面我还会...
  • baidu_26352053
  • baidu_26352053
  • 2016年05月24日 08:52
  • 5503

android6.0悬浮窗权限问题(eg:魅族)

// 判断悬浮窗权限是否存在 public static boolean getAppOps(Context context) { try { Object object = context.getS...
  • qq_36528752
  • qq_36528752
  • 2017年06月06日 15:44
  • 752

Android WindowManager悬浮窗:不需要申请权限实现悬浮

Android WindowManager悬浮窗:不需要申请权限实现悬浮附录文章1介绍了Android平台上的悬浮窗WindowManager,WindowManager悬浮窗可以悬浮在Andro...
  • zhangphil
  • zhangphil
  • 2016年08月26日 18:30
  • 10356

悬浮窗与Home Back事件

搜悬浮窗可以搜到很多方法,但针对Home  、  back  事件具体的很少。 最近公司让我在做这方面的功能,集中众人力量,受益匪浅啊。 简单介绍吧,悬浮窗接收不到Home监听;back也不能直接...
  • qq_22229153
  • qq_22229153
  • 2015年07月23日 11:38
  • 723
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android进阶-悬浮窗
举报原因:
原因补充:

(最多只允许输入30个字)