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 ...
随机推荐
- Microsoft.Office.Interop第三方程序 ppt 转换为PDF出错
错误信息:Retrieving the COM class factory for component with CLSID {91493441-5A91-11CF-8700-00AA0060263B ...
- C# 将容器内容转成图片导出
/// 将容器内容转成图片导出,这里的controller就是this /// </summary> private void OutTheContro ...
- Practical Malware Analysis里有关inetsim\APATEDNS
以前从未接触过linux,碰到了许多问题,按步骤: 1\安装VMWARE,安装ubuntu16.04 问题1:之前装的是VM10,装完后没有安装VMTOOLS,我点安装 VMTOOLS,它弹出“简易安 ...
- Topcoder SRM570 900 CurvyonRails
题意:给定一个网格,一些格子是障碍不用管,剩余的格子是城市,你可以修建铁路,铁路的形状可以是直的或者弯的,也就是说可以以这个点为节点连接它四联通的其中两个方块.要求用一个或多个环来覆盖所有城市.对于有 ...
- Jquery的各种验证
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...
- Java中的弱引用
Strong references StringBuffer buffer = new StringBuffer(); 普通的对象创建都是这种类型,只要buffer还存在,对象就不会被GC回收.同时也 ...
- 在PHP中如何实现在做了么个操作后返回到指定页面
我们经常会碰到类似用户在没有登录的情况下进行提问.评论,需要用户登录后返回刚才浏览的网页,这种功能用cookie保存当前url地址来实现.我用的是jquery,读者需要懂点jquery中的ajax请求 ...
- AWS-CDH5.5安装 CM配置节点
在CM节点上进行安装时出现错误: ================================================================================ Pa ...
- svn图标不显示的解决方案
最近发现svn图标莫名其妙的不显示,其他操作都正常.在网上搜了一些方法. 解决方法一(失败): 升级最新版本,我的本来就是最新版本 解决方法二(失败): 右键->TortoiseSVN-> ...
- spring aop 声明式事务管理
一.声明式事务管理的概括 声明式事务(declarative transaction management)是Spring提供的对程序事务管理的方式之一. Spring的声明式事务顾名思义就是采用声明 ...