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 ...
随机推荐
- ORACLE 误删除视图恢复
1.使用 dba_views 回退到特定时间段,查看定义 select view_name,text from (select * From dba_views AS OF TIMESTAMP(SYS ...
- iOS/OSX学习资源
https://www.raywenderlich.com/ (Ray视频教学) http://wiki.jikexueyuan.com/project/swift/ (swift中文学习网站)
- XmlHelper
获取XML节点的值(http服务使用xml传输数据,节点名称唯一) /// <summary> /// 获取xml节点的值 /// </summary> /// <par ...
- Android studio 项目的layout的文件打开,preview 视图无法显示,提示“no sdk found...”可能原因?
1.安装android studio后启动,引导新的下载的sdk文件夹,不要默认在c:\users\你的用户名\appdata...下的sdk文件夹. 2.如果已经默认的,重新在settings/pr ...
- 关闭SqlServer连接
经常使用需要还原数据库又不想关闭已经打开的画面,所以直接上 CREATE PROCEDURE [dbo].[StopLogin] ) AS DECLARE ), ) BEGIN IF (@Dname ...
- Linux学习 : 自己写bootloader
一.bootloader 目标:启动内核 基本功能: ①初始化硬件:关看门狗.设置时钟.设置SDRAM.初始化NAND FLASH ②image比较大需要重定位到SDRAM ②将内核从NAND FLA ...
- as3延迟处理
查找关键字“flashplayer 弹性跑道” 每当一帧即将走完,FlashPlayer就要做些总结性工作(一次性地汇总变化),把这一帧当中发生的变化拿出来展示(渲染)一下. 如果它处理的事情少,工作 ...
- Python 2.7 因为少写括号导致的 SyntaxError 错误
贴代码: # -*- coding: utf-8 -*- # 控制缩进tab数量 def GetTabStr(tab_num): tab_str = "" for i in xra ...
- Python开发入门与实战19-Windows Azure web 应用部署
19. 微软云web应用部署 上一章节我们介绍了如何实现在微软云通过虚拟机部署我们的在python django应用,本章我们来介绍如何Windows Azure上部署通过部署网站的方式来部署我们的应 ...
- 移动混合开发之android文件管理新建文件和删除文件
今天经过一天超过8小时的实践,有很多CSS上的细节需要注意: 1, /*注意是对before的操作*/ .content ul li .icon-check-empty:before{ display ...