android view : window
既然是view,为什么要说window,实际上着是一个很有用的东西,在展现view和设计界面上很有用,就比如说悬浮窗
但是这时候又要分清楚一个概念,window到底是什么?在activity中说过了我们的view的父类是一个decorview,decroview是phonewindow的内部类,而phonewindow就是我们所说的window,想这样一个问题,那界面上的那些statusbar和对话框,以及toast又是一些什么?如果抽象思维好,oo思维好,那么一定会明白这些东西其实都一样,都是phonewindow。也就是说所有有边界的东西都是window,也就是phonewindow。包括对话框,toast,悬浮窗,以及statusbar。那么想一下activity的phonewindow是怎么显示出来的?也就是windowmanager。所有的视图的操作加载都是使用的windowmanager。明白了这个概念,就明白了所有添加窗口的机制。
其实在添加窗口的时候,你不可以随便添加,因为窗口是由层级概念的,主要是分为3种,1.系统的窗口:包括statusbar,系统的提示框,来电界面。2.应用窗口:包括activity的窗口等。3应用的子窗口:包括panel,对话框等。也就是说这些窗口类型必须是有顺序的,系统窗口优先级是最高的,你在添加系统的窗口一定会出现在应用窗口的前面,子窗口会出现在应用窗口之前。我们要根据创建窗口的顺序才可以创建出适当位置的窗口。
其实管理这些的是系统的windowmanagerservice。我们可以通过windowmanager来添加一个窗口到界面上。你可能疑问为什么我说窗口有这3种,在windowmanager添加window的时候会有一个type类型,这个类型里面定义了上面的各种type,在2000以上的就是系统窗口的属性值type,但是你要添加一个activity的就必须使用2000一下的,所以dialog和popwindow这些依赖actvity的窗口就需要使用2000以下的属性。
分析源码就可以看出popupwindow使用的是private int mWindowLayoutType = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL;而dialog使用的是activity的decroview的WindowManager.LayoutParams l = mWindow.getAttributes();这也就是为什么dialog必须使用activity的context。从这些可以看出来这些东西都是应用的type类型。
悬浮窗:
在设计悬浮窗的时候,有些人使用了连续的toast来展现,其实这个很没有技术含量,完全可以使用挂载window的方式,在挂载window的时候就要注意一些东西了,window需要一个context。这个时候要是actvity关闭了,context的引用就失效了,这显然是不可以的,所以一般是使用service开一个服务来显示悬浮窗,你可以设置window的flag来选择window的一些模式,比如可否点击等,这样就可以自定义view,然后根据这些view的事件来进行处理。
android view : window的更多相关文章
- Android View, Window,Activity概念区分(2)
(1)View:最基本的UI组件,表示屏幕上的一个矩形区域. (2)Window: 表示一个窗口,不一定有屏幕那么大,可以很大也可以很小:它包含一个View tree和窗口的layout 参数.Vie ...
- bug_ _ android.view.WindowManager$BadTokenException: Unable to add window -- token
========4 关于android的一个常见错误:Unable to add window --token is not valid android.view.WindowManage ...
- Android View各种尺寸位置相关的方法探究
Android View各种尺寸位置相关的方法探究 本来想做一个View间的碰撞检测之类的. 动手做了才发现不是想象的那么简单. 首先,写好了碰撞检测的工具类如下: package com.mengd ...
- Android View 之进度条+拖动条+星级评论条....
PS:将来的你会感谢现在奋斗的自己.... 学习内容: 1.进度条 2.拖动条 3.星级评论条 1.进度条... 进图条这东西想必大家是很熟悉的...为了使用户不会觉得应用程序死掉了,因此 ...
- android.view.WindowLeaked解决办法
08-07 14:51:28.129: E/WindowManager(22277): Activity com.xxx.xxx.xxx.xxx.LoginActivity has leaked wi ...
- Android View 的事件分发原理解析
作为一名 Android 开发者,每天接触最多的就是 View 了.Android View 虽然不是四大组件,但其并不比四大组件的地位低.而 View 的核心知识点事件分发机制则是不少刚入门同学的拦 ...
- 关于android.view.WindowLeaked(窗体泄露)的解决方案
虽然是小问题一个,但也困扰了我一段时间,现在记下来,给自己做个备忘,也可以给其他人一个参考 view plaincopy to clipboardprint? 01-08 01:49:27.874: ...
- Activity has leaked window that was originally added -界面退出时未关闭对话框异常 android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running? -
退出Activity时弹出登录框,点击确定finish当前Activity,结果报了这个错,随后查找资料知道 原因: 是因为退出Activity时没有关闭弹出框,出现了这个错误 解决方法: 只需要在a ...
- android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
原博客地址:http://aijiawang-126-com.javaeye.com/blog/662336 在Activity中newSpinner是我把mContext传入,但是出了 andr ...
随机推荐
- uva 10817(状压dp)
题意:就是有个学校要招老师.要让没门课至少有两个老师可以上.每个样样例先输入三个数字课程数量s,已经在任的老师数量,和应聘的老师数量.已经在任的一定要聘请. 思路是参考了刘汝佳书上的,关键如何状压. ...
- vs安装后当切换到图形设计界面的时候自动弹出“正在准备安装的提升”,然后程序处于假死状态
Vs2008 安装后当切换到图形设计界面的时候自动弹出 ”正在准备安装的提示“,然后程序处于假死状态 在网上找了很多,最终解决问题: 从vs2008安装光盘中找到 /WCU/WebDesignerC ...
- apache和nginx
虽然nginx使用较少 还是写写文章,记录下 nginx是异步非阻塞,apache是阻塞的. apache动态页面比nginx好. 由于nginx的高并发性(使用epoll模型),所以出来静态页面性能 ...
- 【 2013 Multi-University Training Contest 2 】
HDU 4611 Balls Rearrangement 令lcm=LCM(a,b),gcd=GCD(a,b).cal(n,a,b)表示sum(abs(i%a-i%b)),0<=i<n. ...
- codeforces 484C Strange Sorting Codeforces Round #276 (Div. 1) C
思路:首先 他是对1到k 元素做一次变换,然后对2到k+1个元素做一次变化....依次做完. 如果我们对1到k个元素做完一次变换后,把整个数组循环左移一个.那么第二次还是对1 到 k个元素做和第一次一 ...
- NSOperation的start与main,并发与非并发。
http://blog.csdn.net/a2331046/article/details/52294006 在ios4以前,只有非并发的情况下,队列会为operation开启一个线程来执行.如果是并 ...
- 对于Python中self的看法
首先看一段Java代码 public class Test { public String name; public int age; public String gender; public Str ...
- List<T>的对比
对于类型的对比,linq原来的对比是区分不了的. 对两个list进行查询交集方法.交集,并集的函数是直接用Linq的,这里不再写. List<T> intersectList = quer ...
- 【转】MyEclipse开发Web项目发布到Tomcat下的Root目录
通常情况下,Web项目是发布到Tomcat下的webapps文件目录下的 .以至于我们访问的时候: 例如:Web应用项目名称为:webManager,则部署到tomcat后,是部署在tomcat/we ...
- [转]bash快捷键
生活在 Bash shell 中,熟记以下快捷键,将极大的提高你的命令行操作效率. 编辑命令 Ctrl + a :移到命令行首 Ctrl + e :移到命令行尾 Ctrl + f :按字符前移(右向) ...