Android 窗口机制
2016-05-21 16:33
232 查看
Android 窗口特点
Android窗口是层叠式布局,顾名思义,它是可以允许多个窗口层叠显示。该布局一般需要一个窗口管理服务端,服务端采用的是共享库的方式来进行工作,这种方式一般用在嵌入式设备上,开销较小。层叠式的展示采用是z-order的规则,层级越大的越是在上面
Android 中到底什么是窗口?又与View有什么不同?
View只是单纯的视图的展示,是一个可见的块。
所有被WindowManagerService管理都是窗口,它有一个方法是addView(),添加的是View。所以在WmS来看,窗口就上一个View。但是不能说一个View是窗口
Android 窗口的分类
1.应用窗口: 一般对应一个Activity ,层级值(0~99)
2.子窗口:有一个父窗口,父窗口可以是任意类型, 层级值(1000~1999)
3.系统窗口:不对应Activity,无父窗口,层级值(2000~2999)
在层级中有一些具体的划分,比如某些层级值就是由操作系统固定的,具体有一个表格。表格可以见我在网上找的链接:
http://blog.csdn.net/geloin/article/details/42779025
应用窗口
这是最重要的也是用的最频繁的,因为它对应一个Activity,有Activity的地方就有它。
在介绍这个时候不得不介绍一个类:Window,它是窗口的抽象,准确的说是应用窗口的抽象(在其它类型的窗口中并没有用到),这个类决定了窗口展示的位置大小,透明度等等一些东东!给这类举个用处,比如你弹出一个popupWindow后需要背景变成灰色的蒙版,你可以改变它的透明度
有个特殊的地方是Dialog默认的类型是应用窗口,所以Dialog也有一个window对象。默认弹出的对话框是会出现黑色的蒙版,使得屏幕的其它地方变暗,我们可以通过设置来改变其默认的行为,下面是代码实现
多数情况下我们都使用了setContentView()这里对窗口进行了装饰
手动设置的过程只有中间的过程,当然,也可以通过设置主题等方式去掉上面的标题栏。可以通过ViewGroup contentParent = (ViewGroup)findViewById(ID_ANDROID_CONTENT)获取到整个窗口填充的视图。ID_ANDROID_CONTENT正是id = content的FrameLayout
=========以下的更新补充=================
关于窗口有个很好的理解,就是4.4以后的沉浸式。
网上有个沉浸式的处理类SystemBarTintManager.java
它的做法就是获取到获取到状态栏窗口的的高度,然后设置一个一样高度视图,默认的应该是黑色或者白色(应该与主题相关)。我们看到以为状态栏与下面的Activity视图是一整块,其实不是的。
状态栏本身是一个窗口,它处于Activity所对应窗口的上面,而且应该状态栏应该有透明属性的。默认的Activity的窗口留出了上面的空间。可以通过DecorView来操作整个Activity所对应的窗口视图,将默认填充黑色的地方,改成其它的颜色。
Android窗口是层叠式布局,顾名思义,它是可以允许多个窗口层叠显示。该布局一般需要一个窗口管理服务端,服务端采用的是共享库的方式来进行工作,这种方式一般用在嵌入式设备上,开销较小。层叠式的展示采用是z-order的规则,层级越大的越是在上面
Android 中到底什么是窗口?又与View有什么不同?
View只是单纯的视图的展示,是一个可见的块。
所有被WindowManagerService管理都是窗口,它有一个方法是addView(),添加的是View。所以在WmS来看,窗口就上一个View。但是不能说一个View是窗口
Android 窗口的分类
1.应用窗口: 一般对应一个Activity ,层级值(0~99)
2.子窗口:有一个父窗口,父窗口可以是任意类型, 层级值(1000~1999)
3.系统窗口:不对应Activity,无父窗口,层级值(2000~2999)
在层级中有一些具体的划分,比如某些层级值就是由操作系统固定的,具体有一个表格。表格可以见我在网上找的链接:
http://blog.csdn.net/geloin/article/details/42779025
应用窗口
这是最重要的也是用的最频繁的,因为它对应一个Activity,有Activity的地方就有它。
在介绍这个时候不得不介绍一个类:Window,它是窗口的抽象,准确的说是应用窗口的抽象(在其它类型的窗口中并没有用到),这个类决定了窗口展示的位置大小,透明度等等一些东东!给这类举个用处,比如你弹出一个popupWindow后需要背景变成灰色的蒙版,你可以改变它的透明度
WindowManager.LayoutParams params= this.getWindow().getAttributes(); params.alpha=1f; this.getWindow().setAttributes(params);
有个特殊的地方是Dialog默认的类型是应用窗口,所以Dialog也有一个window对象。默认弹出的对话框是会出现黑色的蒙版,使得屏幕的其它地方变暗,我们可以通过设置来改变其默认的行为,下面是代码实现
WindowManager.LayoutParams a = dialog.getWindow().getAttributes(); a.dimAmount = 0f;
多数情况下我们都使用了setContentView()这里对窗口进行了装饰
手动设置的过程只有中间的过程,当然,也可以通过设置主题等方式去掉上面的标题栏。可以通过ViewGroup contentParent = (ViewGroup)findViewById(ID_ANDROID_CONTENT)获取到整个窗口填充的视图。ID_ANDROID_CONTENT正是id = content的FrameLayout
=========以下的更新补充=================
关于窗口有个很好的理解,就是4.4以后的沉浸式。
网上有个沉浸式的处理类SystemBarTintManager.java
它的做法就是获取到获取到状态栏窗口的的高度,然后设置一个一样高度视图,默认的应该是黑色或者白色(应该与主题相关)。我们看到以为状态栏与下面的Activity视图是一整块,其实不是的。
状态栏本身是一个窗口,它处于Activity所对应窗口的上面,而且应该状态栏应该有透明属性的。默认的Activity的窗口留出了上面的空间。可以通过DecorView来操作整个Activity所对应的窗口视图,将默认填充黑色的地方,改成其它的颜色。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories