android FakeWindow的小应用大用途
android FakeWindow的小应用大用途
在windowmanager里面有一个FakeWindow,细致一看也就是一个透明的应用覆盖到屏幕的最前端,这样有什么优点呢?首先我们还是从应用的需求来看这个问题。在android系统里无论是手机还是平板,状态栏一般都是在的,导航栏在有些设备里面是没有的,由于android须要的那些HOME\BACK\MENU\SERCACH可能已经做在触摸屏上,或者是其它一些低成本的触摸小按键上或者硬按键上,可是也有非常多机器是没有这些的,那么就须要一个导航栏了,这样前期背景就清楚了。
有了导航栏跟状态栏,好是好,特别是导航栏占屏幕位置啊,在一些须要大屏幕或者全屏的应用中,导航栏跟状态栏显得又是那么碍眼,比方看图片的时候、看电影的时候,一般来说都希望可以全然占据屏幕,这样看效果好一些。要想效果好,就得有方法是不是,当然是。我们知道导航栏跟状态栏属于systemui的范畴,要占据他们的位置,得跟他们好好商议一下吧,还好有windowsmanager的policy来协调。详细位置:
/*****************************************************************************************************/
声明:本博内容均由http://blog.csdn.net/edsam49原创,转载请注明出处,谢谢!
/*****************************************************************************************************/
android\frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java,怎么申请全屏的设计非常easy,笔者在去年的博文中介绍过,须要看的看看这个【SystemUI中状态栏跟导航栏隐藏显示控制方法及效果演示样例】链接:http://blog.csdn.net/edsam49/article/details/11819209
当你申请了全屏时,phoneWindowsmanager会给给系统加一个FakeWindow来接受触摸屏的输入事件,不限于触摸屏啊,假设是按键的也能截住这个消息。来看看这个FakeWindow是怎么加入到系统的,代码例如以下:
- if (navVisible || navAllowedHidden) {
- if (mHideNavFakeWindow != null) {
- mHideNavFakeWindow.dismiss();
- mHideNavFakeWindow = null;
- }
- } else if (mHideNavFakeWindow == null) {
- // add this for navi would show without navigation bar when SYSTEM_UI_FLAG_HIDE_NAVIGATION setted
- if (mFocusedWindow != null) {
- //Log.i(TAG, "----> chen mFocusedWindow:" + mFocusedWindow);
- final WindowManager.LayoutParams attr = mFocusedWindow.getAttrs();
- final CharSequence title = attr.getTitle();
- if (!needFullScreenNoNavigationBar(title)) {
- mHideNavFakeWindow = mWindowManagerFuncs.addFakeWindow(
- mHandler.getLooper(), mHideNavInputEventReceiverFactory,
- "hidden nav", WindowManager.LayoutParams.TYPE_HIDDEN_NAV_CONSUMER, 0,
- 0, false, false, true);
- }
- }
- }
关键的还是mWindowManagerFuncs.addFakeWindow()这个函数来加入的,详细參数可以看看这个函数原型,也非常easy的,详细可在以下这两个文件里看看:
framework/base/core/java/android/view/WindowManagerPolicy.java跟framework/base/services/java/com/android/server/wm/WindowManagerService.java
我们在此也大概了解了FakeWindow,也就是在全屏的时候可以截住事件输入,在PhoneWindowsmanager里面这个FakeWindow是一旦收到事件输入消息就dismiss了,就消去,同一时候导航栏什么的该出来就出来了。笔者是在做车载导航产品,我们在倒车的时候,屏幕须要全屏显示倒车视频信号,这个信号是覆盖最上面的,假设倒车的时候你去按屏幕,而这个时候假设不截住这样的事件输入消息,在倒车视频以下的应用不知道会处理得像上面样子,反正你就不知道会点到什么,这样显然是不大好的,那我们就须要在处理倒车视频的把输入事件给截住,当然有人说那我这时候把触摸屏驱动里不往上报数据,那还有按键呢?那也有人说那这个时候,我也不报,假设还有走串口协议过来的呢?还有鼠标呢?键盘呢?一个个的去截,一个个的去disabled,太累了。有了FakeWindow就方便非常多,也就是价格透明窗口来截不论什么输入事件,这样会方便非常多,对系统的开销也不大,差点儿可以忽略不计。
FakeWindow还是非常实用处的,希望这个介绍对有些同学实用。
android FakeWindow的小应用大用途的更多相关文章
- 小身材大用途,用PrimusUI驾驭你的页面
“PrimusUI”是自己在借鉴了如今网上很多开源的UI库,再经过自己整理加工的一个简单代码集合. 每个功能块的CSS代码都很少,力求简单易懂,低门槛,代码可根据自己实际情况轻易修改,改到符合自己场景 ...
- MYSQL小函数大用途之-------FIND_IN_SET
没有前言和解释,直接看怎么用 当前我所知道两种用法: 第一种:和like的作用有点相似,但用这个函数会比like更准确的查到你想要的数据. 前提是当前的字段满足俩个要求: 类型为字符型. 储存格式为- ...
- Android 之窗口小部件详解--App Widget
Android 之窗口小部件详解--App Widget 版本号 说明 作者 日期 1.0 添加App Widge介绍和示例 Sky Wang 2013/06/27 1 App ...
- Android应用开发-小巫CSDN博客client之嵌入有米广告
Android应用开发-小巫CSDN博客client之嵌入有米广告 上一篇博客给大家介绍怎样集成友盟社会化组件,本篇继续带来干货,教大家怎样嵌入广告到应用中去.小巫自称专业对接30年,熟悉各大渠道SD ...
- Android 之窗口小部件详解(三) 部分转载
原文地址:http://blog.csdn.net/iefreer/article/details/4626274. (一) 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget ...
- 用Kotlin破解Android版微信小游戏-跳一跳
前言 微信又更新了,从更新日志上来看,似乎只是一次不痛不痒的小更新.不过,很快就有人发现,原来微信这次搞了个大动作——在小程序里加入了小游戏.今天也是朋友圈被刷爆的缘故. 看到网上 有人弄了一个破解版 ...
- 最强 Android Studio 使用小技巧和快捷键
写在前面 本文翻译自 Android Studio Tips by Philippe Breault,一共收集了62个 Android Studio 使用小技巧和快捷键. 根据这些小技巧的使用场景,本 ...
- Android课程---Android Studio使用小技巧:提取方法代码片段
这篇文章主要介绍了Android Studio使用小技巧:提取方法代码片段,本文分享了一个快速复制粘贴方法代码片段的小技巧,并用GIF图演示,需要的朋友可以参考下 今天来给大家介绍一个非常有用的Stu ...
- [小细节,大BUG]记录一些小问题引起的大BUG(长期更新....)
[小细节,大BUG] 6.问题描述:当从Plist文件加载数据,放入到tableView中展示时,有时有数据,有时又没有数据.这是为什么呢?相信很多大牛都想到了:我们一般将加载的数据,转换成模型,放入 ...
随机推荐
- MongoDB实战指南(六):MongoDB复制集之复制集概述
1. 复制集概述 数据库总是会遇到各种失败的场景,如网络连接断开.断电等,尽管journaling日志功能也提供了数据恢复的功能,但journaling通常是针对单个节点来说的,只能保证单节点数据的一 ...
- delphi中formatFloat代码初探(在qt下实现floatformat的函数)
由于项目需要,需要在qt下实现floatformat的函数.之前写过一个,但是写得不好.决定重新写一个,参考delphi xe2下的实现.把xe2下的相关代码都看了一遍,xe2的代码思路在这里贴出来. ...
- yii 验证器和验证码
http://www.yiiframework.com/doc/api/1.1/CCaptcha http://www.cnblogs.com/analyzer/articles/1673015.ht ...
- VC C运行时库(CRTL)的几个版本及选用
分类: Windows 2008-12-23 10:01 987人阅读 评论(0) 收藏 举报ciostreammfclibrary多线程import最近做项目碰到了一个关于在动态库中使用MFC以及在 ...
- Item Import: What Does "Sync" Items Do? (Doc ID 417887.1)
In this Document Goal Solution APPLIES TO: Oracle Item Master - Version 11.5.10.0 to 11.5.10.0 [Rele ...
- Form – 保存自動關閉當前窗口
FAQ: 在BUTTON的触发器中,写如下代码, commit_form; go_bloack('你想显示的那个window的block'); --或者写 show_view('你要显示的canvas ...
- 从头开始编写一个Orchard网上商店模块(1) - 介绍
原文地址:http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-webshop-module-from-scratch-par ...
- [转]ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)
前一篇中我们已经了解了Action Filter 与 内置的Filter实现,现在我们就来写一个实例.就写一个防盗链的Filter吧. 首先继承自FilterAttribute类同时实现IAction ...
- Selenium 使用NPOI来实现report
Selenium自动化测试过程中,模拟用户操作能实现后需要测试结果输出,这是一个比较重要的过程 1.用system.IO 读写来实现,如果使用这个方式,每个测试生成一个报告,容易开启太多的线程,占用内 ...
- Ruby require 路径问题
require 负责引用一个外部文件,可以省略".rb"字样. 如: require 'foo.bar' 等价于 require 'foo' 在Ruby中,同一目录下的文件, 如 ...