写Android程序的时候一般用WindowManager就是去获得屏幕的宽和高,来布局一些小的东西。基本上没有怎么看他的其他的接口。
这两天想写一个简单的类似于Toast的东西,自定义布局,突然发现,原来Toast的时间是不能自己定义的,只有两个固定的时间,分别是2秒和3.5秒。我的需求是自定义显示的时间,这个显然不能满足我的需求。但是它是如何做到显示一个View凌驾于现有的所有的View之上的呢?
我们Android平台是一个又一个的Activity组成的,每一个Activity有一个或者多个View构成。所以说,当我们想显示一个界面的时候,我们首先想到的是建立一个Activity,然后所有的操作在Activity里面实现,或者是一个Dialog或者Toast。这种方式固然简单,但是在有些情况下,我们要求的只是简单的显示,用Activity显然是多余,这个时候,我们如何处理呢?
原来,整个Android的窗口机制是基于一个叫做WindowManager,这个接口可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View,直接忽略我们以前的Activity或者Dialog之类的东东。其实我们的Activity或者Diolog底层的实现也是通过WindowManager,这个WindowManager是全局的,整个系统就是这个唯一的东东。它是显示View的最底层了。
写一个简单的代码:
WindowManager mWm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
Button view = new Button(this);
view.setText("window manager test!");
WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
mWm.addView(view, mParams);
我们这个button的显示和当前的运行环境基本上是无关的,当前是什么activity或者是桌面,使用这个底层的结果给你的编程带来很大的灵活性,但是要注意,显示出来就要销毁掉,这个是必须的,销毁其实就是一个remove。
但是仅仅这么写会有个问题,就是view显示在最上层,但是后面的view无法获得焦点,当你touch的坐标超出上次view的范围时
mParams = new WindowManager.LayoutParams();
mWm.updateViewLayout(view, mParams);
需要后面的view获得焦点时:
mParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
mWm.updateViewLayout(view, mParams);
相关推荐
仿360悬浮窗,WindowManager的使用
android13 WindowManager-Shell.jar
window、windowmanager的分析
WindowManager属性详解:WindowManager.LayoutParams 是 WindowManager 接口的嵌套类;继承于 ViewGroup.LayoutParams 。 它的内容十分丰富。其实WindowManager.java的主要内容就是由这个类定义构成。
Android悬浮窗实现 使用WindowManager实现像电视顶端文字广告栏效果,开发工具:AS
在App里的Demo2实现,使用WindowManager在Service实现
Window是一个抽象类,具体实现是 PhoneWindow 。不管是 Activity 、 Dialog 、 Toast 它们的视图都是附加在Window上的,因此Window实际上是View的直接管理者。
效果图如下 第一步:新建DragView继承RelativeLayout package com.rong.activity; ... import android.content.Context; import android.graphics.Color;...import android.graphics.PixelFormat;...import android
WindowManager添加隐藏窗口后,按CTRL+1,可实现隐藏,在按CTRL+1,取消隐藏,适合打开桌面窗口较多的人的,超级老板键!!!
windowmanager对话框,添加6.0权限判断,
代替Toast/SnackBar新方式,使用WindowManager 无需申请权限WIKI中文说明Usageallprojects { repositories { ... maven { url 'https://jitpack.io' }implementation '...
主要为大家详细介绍了Android利用WindowManager实现悬浮窗效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
在此文档中列出了 所有WindowManager.LayoutParams的参数及详细信息
一个WindowManager悬浮窗,悬浮显示歌词效果。WindowManager背景设置为了透明色,显示的WindowManager关闭启动它的Activity回到主界面仍然有效。仅供参考............
使用WindowManager使用系统级弹窗
调用WindowManager,并设置WindowManager.LayoutParams的相关属性,通过WindowManager的addView方法创建View,这样产生出来的View根据WindowManager.LayoutParams属性不同,效果也就不同了。比如创建系统顶级窗口,...
软件简介:WindowManager 3.1 绿色版[桌面窗口管理器 ] 是一个桌面窗口管理器,可以方便地管理系统桌面上的所有打开的窗口;可以隐藏、透明化或者置顶窗口,还可以制定相应的规则来控制窗口的打开。它还提供了最小...
核心在于WindowManager,通过它创建一个LayoutParams对象,然后利用该对象设置flag、gravity、xy坐标点。它提供三个方法:addView()、updateLayout()、removeView()。分别对应是添加view、更新view、移除view。主要...
利用windowmanager的addview()方法制作的弹出式窗口,可以手指跟随,点击根据状态可以展开或者伸缩。
android 采用windowmanager屏蔽home键