我们Android平台是一个又一个的Activity组成的,每一个Activity有一个或者多个View构成。所以说,当我们想显示一个界面的时候,我们首先想到的是建立一个Activity,然后所有的操作在Activity里面实现,或者是一个Dialog或者Toast。这种方式固然简单,但是在有些情况下,我们要求的只是简单的显示,用Activity显然是多余,这个时候,我们如何处理呢?
原来,整个Android的窗口机制是基于一个叫做WindowManager,这个接口可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View,直接忽略我们以前的Activity或者Dialog之类的东东。其实我们的Activity或者Diolog底层的实现也是通过WindowManager,这个WindowManager是全局的,整个系统就是这个唯一的东东。它是显示View的最底层了。
写一个简单的代码:
示例1:
WindowManager wm=null;
View rootView;
public void showWindow()
{
if(wm==null)
wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
if(rootView==null)
{
Button btn = new Button(this);
btn.setText("window manager test!");
OnClickListener listener = new OnClickListener() {
public void onClick(View v) {
Toast.makeText(MainActivity.this, "How are you? No is:"+System.currentTimeMillis()%100, 2000).show();
}
};
btn.setOnClickListener(listener);
rootView=btn;
}
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.width=400;
params.height=100;
/*@1params.flags |=(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
|WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE); */
//@2params.flags|=WindowManager.LayoutParams.FLAG_SPLIT_TOUCH;
wm.addView(rootView, params);
}
public void romoveWindow()
{
if(rootView!=null)
wm.removeView(rootView);
}
我们这个button的显示和当前的运行环境基本上是无关的,当前是什么activity或者是桌面,使用WindowManager可以给你的编程带来很大的灵活性,但是要注意,显示出来就要销毁掉,这个是必须的,销毁其实就是一个remove。
注意:默认的话,view显示在最上层,但是后面的view无法获得焦点,当你touch的坐标超出你的view的范围时,它还是把touch事件发送到它。在Android
SDK3.0之前的话,没有很好的处理方式。只有采用@1处的代码,让你的view不能获得焦点,不能处理触摸屏事件,不能接收按键事件及其他按钮事件,这样它后面的view才能获得焦点,才能接收触摸屏事件,按键事件及其他按钮事件。在Android
SDK3.0之后,才支持slipt touch的处理。这时你可以采用@2处的代码。
分享到:
相关推荐
一个WindowManager悬浮窗,悬浮显示歌词效果。WindowManager背景设置为了透明色,显示的WindowManager关闭启动它的Activity回到主界面仍然有效。仅供参考............
主要为大家详细介绍了Android使用WindowManager构造悬浮view的具体方法,感兴趣的小伙伴们可以参考一下
调用WindowManager,并设置WindowManager.LayoutParams的相关属性,通过WindowManager的addView方法创建View,这样产生出来的View根据WindowManager.LayoutParams属性不同,效果也就不同了。比如创建系统顶级窗口,...
WindowManager属性详解:WindowManager.LayoutParams 是 WindowManager 接口的嵌套类;继承于 ViewGroup.LayoutParams 。 它的内容十分丰富。其实WindowManager.java的主要内容就是由这个类定义构成。
window、windowmanager的分析
Window是一个抽象类,具体实现是 PhoneWindow 。不管是 Activity 、 Dialog 、 Toast 它们的视图都是附加在Window上的,因此Window实际上是View的直接管理者。
android13 WindowManager-Shell.jar
在App里的Demo2实现,使用WindowManager在Service实现
核心在于WindowManager,通过它创建一个LayoutParams对象,然后利用该对象设置flag、gravity、xy坐标点。它提供三个方法:addView()、updateLayout()、removeView()。分别对应是添加view、更新view、移除view。主要...
WindowManager添加隐藏窗口后,按CTRL+1,可实现隐藏,在按CTRL+1,取消隐藏,适合打开桌面窗口较多的人的,超级老板键!!!
Android悬浮窗实现 使用WindowManager实现像电视顶端文字广告栏效果,开发工具:AS
windowmanager对话框,添加6.0权限判断,
仿360悬浮窗,WindowManager的使用
代替Toast/SnackBar新方式,使用WindowManager 无需申请权限WIKI中文说明Usageallprojects { repositories { ... maven { url 'https://jitpack.io' }implementation '...
在此文档中列出了 所有WindowManager.LayoutParams的参数及详细信息
安卓使用WindowManager.addView()简单实现悬浮窗口播放视频
主要为大家详细介绍了Android利用WindowManager实现悬浮窗效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
利用windowManager和DevicePolicyManager做的一个悬浮框实时锁屏效果。 具体操作:运行apk到手机上,在最又下角有一个透明正方形,点击锁屏。
软件简介:WindowManager 3.1 绿色版[桌面窗口管理器 ] 是一个桌面窗口管理器,可以方便地管理系统桌面上的所有打开的窗口;可以隐藏、透明化或者置顶窗口,还可以制定相应的规则来控制窗口的打开。它还提供了最小...