文档章节

Android之WindowManager

Carbenson
 Carbenson
发布于 2015/09/09 16:25
字数 503
阅读 89
收藏 6

我们Android平台是一个又一个的Activity组成的,每一个Activity有一个或者多个View构成。所以说,当我们想显示一个界面的时候,我们首先想到的是建立一个Activity,然后所有的操作在Activity里面实现,或者是一个Dialog或者Toast。这种方式固然简单,但是在有些情况下,我们要求的只是简单的显示,用Activity显然是多余,这个时候,我们如何处理呢? 

原来,整个Android的窗口机制是基于一个叫做 WindowManager,这个接口可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View,直接忽略我们以前的Activity或者Dialog之类的东东。其实我们的Activity或者Diolog底层的实现也是通过WindowManager,这个 WindowManager是全局的,整个系统就是这个唯一的东东。它是显示View的最底层了。 

写一个简单的代码: 

Java代码  收藏代码

  1. WindowManager mWm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);   

  2. Button view = new Button(this);   

  3. view.setText("window manager test!");   

  4. WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();   

  5. mWm.addView(view, mParams);   


Java代码  收藏代码

  1. //改变Dialog背景透明度  

  2. Dialog dg = new Dialog(this);  

  3. Window window = dg.getWindow();  

  4. WindowManager.LayoutParams lp = window.getAttributes();  

  5. lp.alpha = 0.5f;  

  6. window.setAttributes(lp);  

  7. //lp.alpha = 0.5f 透明度设置 其值要合理 自己反复测试  

  8. //为什么要这个技巧 因为很多人说:弹出Dialog会导致背景变暗 有Animation发生 导致性能变慢 可以用这个改变之 而且可以借助这个 使得全透明 不挡住Dialog后面内容的显示  



一般在刚开始开发android时,会犯一个错误,即在View的构造函数中获取getWidth()和getHeight(),当一个view对象创建时,android并不知道其大小,所以getWidth()和getHeight()返回的结果是0,真正大小是在计算布局时才会计算,所以会发现一个有趣的事,即在onDraw( ) 却能取得长宽的原因。 

Java代码  收藏代码

  1. width = activity.getWindowManager().getDefaultDisplay().getWidth();   

  2. height = activity.getWindowManager().getDefaultDisplay().getHeight();   


本文转载自:http://gundumw100.iteye.com/blog/830235

Carbenson
粉丝 19
博文 271
码字总数 84864
作品 0
广州
程序员
私信 提问
Android窗口机制(三)Window和WindowManager的创建与Activity

Android窗口机制系列 Android窗口机制(一)初识Android的窗口结构 Android窗口机制(二)Window,PhoneWindow,DecorView,setContentView源码理解 Android窗口机制(三)Window和WindowMan...

亭子happy
02/26
61
0
Android平台WindowManager

我们Android平台是一个又一个的Activity组成的,每一个Activity有一个或者多个View构成。所以说,当我们想显示 一个界面的时候,我们首先想到的是建立一个Activity,然后所有的操作在Activit...

鉴客
2011/09/15
142
0
Android窗口机制(五)最终章:WindowManager.LayoutParams和Token以及其他窗口Dialog,Toast

Android窗口机制系列 Android窗口机制(一)初识Android的窗口结构 Android窗口机制(二)Window,PhoneWindow,DecorView,setContentView源码理解 Android窗口机制(三)Window和WindowMan...

亭子happy
02/26
82
0
Android 下自定义Toast

自定义Toast中用到了windowManager这个类 一下为简单介绍: 应用程序与窗口管理器的接口。WindowManager是Android中一个重要的服务。WindowManager Service是全局唯一的。它将用户的操作,翻...

Angels_安杰
2015/11/06
115
0
关于android.view.WindowLeaked异常的解决方案

虽然是小问题一个,但也困扰了我一段时间,现在记下来,给自己做个备忘,也可以给其他人一个参考。 Android.view.WindowLeaked按字面了解,Window Leaked大概就是说一个窗体泄漏了,也就是我...

程序袁_绪龙
2014/11/29
161
0

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
10
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
1K
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部