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 ...
随机推荐
- 二:基础概述netty
如果不了解netty的,可以百度下,netty社区现在也比较活跃. 现在所谓的大数据,flume,storm等底层都是netty. netty的性能模型: io模型---->异步非阻塞io ...
- Windows Store App JavaScript 开发:简单对象绑定
简单对象绑定是一种基本的绑定类型,可以实现将一个对象中的数据绑定到HTML元素的属性.下面通过一个示例来演示如何使用HTML5和JavaScript开发一个实现简单对象绑定的Windows应用商店应用 ...
- BZOJ1828 [Usaco2010 Mar]balloc 农场分配
直接贪心,我们把线段按照右端点从小到大排序,然后一个个尝试插入即可... 来证明贪心的正确性: 不妨设贪心得到的答案集合为$S$,最优解的答案集合为$T$ 若$S$不是最优解,那么$S \not= T ...
- Thymeleaf3.0内容
Thymeleaf简介 什么是Thymeleaf Thymeleaf是网站或者独立应用程序的新式的服务端java模板引擎,可以执行HTML,XML,JavaScript,CSS甚至纯文本模板. Thy ...
- 一个crackme的分析
是看雪合集的一个,因为老师让我们多练习,所以我就找了个crackme来练习 http://images2015.cnblogs.com/blog/638600/201612/638600-201612 ...
- Linux 下使用Visual Studio Code
1.下载:https://az764295.vo.msecnd.net/stable/db71ac615ddf9f33b133ff2536f5d33a77d4774e/VSCode-linux-x64 ...
- CALayer 3 详解 -----转自李明杰
CALayer3-层的属性 本文目录 一.隐式动画属性 二.position和anchorPoint 回到顶部 一.隐式动画属性 * 在前面几讲中已经提到,每一个UIView内部都默认关联着一个C ...
- php 图片验证码生成 前后台验证
自己从前一段时间做了个php小项目,关于生成图片验证码生成和后台的验证,把自己用到的东西总结一下,希望大家在用到相关问题的时候可以有一定的参考性. 首先,php验证码生成. 代码如下: 1.生成图像代 ...
- php本地及远程文件包含漏洞
在php程序中包含有file inclusion的时候,php要开启一下两个功能: allow_url_fopen onallow_url_include on 但是开启这两个功能之后伴随的是url漏 ...
- 面试复习(C++)之希尔排序
#include<iostream> using namespace std; void Shellsort(int *a,int len) { int gap; ;gap>;gap ...