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是怎么加入到系统的,代码例如以下:

  1. if (navVisible || navAllowedHidden) {
  2. if (mHideNavFakeWindow != null) {
  3. mHideNavFakeWindow.dismiss();
  4. mHideNavFakeWindow = null;
  5. }
  6. } else if (mHideNavFakeWindow == null) {
  7. // add this for navi would show without navigation bar when SYSTEM_UI_FLAG_HIDE_NAVIGATION setted
  8. if (mFocusedWindow != null) {
  9. //Log.i(TAG, "----> chen mFocusedWindow:" + mFocusedWindow);
  10. final WindowManager.LayoutParams attr = mFocusedWindow.getAttrs();
  11. final CharSequence title = attr.getTitle();
  12. if (!needFullScreenNoNavigationBar(title)) {
  13. mHideNavFakeWindow = mWindowManagerFuncs.addFakeWindow(
  14. mHandler.getLooper(), mHideNavInputEventReceiverFactory,
  15. "hidden nav", WindowManager.LayoutParams.TYPE_HIDDEN_NAV_CONSUMER, 0,
  16. 0, false, false, true);
  17. }
  18. }
  19. }

关键的还是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的小应用大用途的更多相关文章

  1. 小身材大用途,用PrimusUI驾驭你的页面

    “PrimusUI”是自己在借鉴了如今网上很多开源的UI库,再经过自己整理加工的一个简单代码集合. 每个功能块的CSS代码都很少,力求简单易懂,低门槛,代码可根据自己实际情况轻易修改,改到符合自己场景 ...

  2. MYSQL小函数大用途之-------FIND_IN_SET

    没有前言和解释,直接看怎么用 当前我所知道两种用法: 第一种:和like的作用有点相似,但用这个函数会比like更准确的查到你想要的数据. 前提是当前的字段满足俩个要求: 类型为字符型. 储存格式为- ...

  3. Android 之窗口小部件详解--App Widget

    Android 之窗口小部件详解--App Widget  版本号 说明 作者 日期  1.0  添加App Widge介绍和示例  Sky Wang 2013/06/27        1 App ...

  4. Android应用开发-小巫CSDN博客client之嵌入有米广告

    Android应用开发-小巫CSDN博客client之嵌入有米广告 上一篇博客给大家介绍怎样集成友盟社会化组件,本篇继续带来干货,教大家怎样嵌入广告到应用中去.小巫自称专业对接30年,熟悉各大渠道SD ...

  5. Android 之窗口小部件详解(三)  部分转载

    原文地址:http://blog.csdn.net/iefreer/article/details/4626274. (一) 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget ...

  6. 用Kotlin破解Android版微信小游戏-跳一跳

    前言 微信又更新了,从更新日志上来看,似乎只是一次不痛不痒的小更新.不过,很快就有人发现,原来微信这次搞了个大动作——在小程序里加入了小游戏.今天也是朋友圈被刷爆的缘故. 看到网上 有人弄了一个破解版 ...

  7. 最强 Android Studio 使用小技巧和快捷键

    写在前面 本文翻译自 Android Studio Tips by Philippe Breault,一共收集了62个 Android Studio 使用小技巧和快捷键. 根据这些小技巧的使用场景,本 ...

  8. Android课程---Android Studio使用小技巧:提取方法代码片段

    这篇文章主要介绍了Android Studio使用小技巧:提取方法代码片段,本文分享了一个快速复制粘贴方法代码片段的小技巧,并用GIF图演示,需要的朋友可以参考下 今天来给大家介绍一个非常有用的Stu ...

  9. [小细节,大BUG]记录一些小问题引起的大BUG(长期更新....)

    [小细节,大BUG] 6.问题描述:当从Plist文件加载数据,放入到tableView中展示时,有时有数据,有时又没有数据.这是为什么呢?相信很多大牛都想到了:我们一般将加载的数据,转换成模型,放入 ...

随机推荐

  1. MongoDB实战指南(六):MongoDB复制集之复制集概述

    1. 复制集概述 数据库总是会遇到各种失败的场景,如网络连接断开.断电等,尽管journaling日志功能也提供了数据恢复的功能,但journaling通常是针对单个节点来说的,只能保证单节点数据的一 ...

  2. delphi中formatFloat代码初探(在qt下实现floatformat的函数)

    由于项目需要,需要在qt下实现floatformat的函数.之前写过一个,但是写得不好.决定重新写一个,参考delphi xe2下的实现.把xe2下的相关代码都看了一遍,xe2的代码思路在这里贴出来. ...

  3. yii 验证器和验证码

    http://www.yiiframework.com/doc/api/1.1/CCaptcha http://www.cnblogs.com/analyzer/articles/1673015.ht ...

  4. VC C运行时库(CRTL)的几个版本及选用

    分类: Windows 2008-12-23 10:01 987人阅读 评论(0) 收藏 举报ciostreammfclibrary多线程import最近做项目碰到了一个关于在动态库中使用MFC以及在 ...

  5. 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 ...

  6. Form – 保存自動關閉當前窗口

    FAQ: 在BUTTON的触发器中,写如下代码, commit_form; go_bloack('你想显示的那个window的block'); --或者写 show_view('你要显示的canvas ...

  7. 从头开始编写一个Orchard网上商店模块(1) - 介绍

    原文地址:http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-webshop-module-from-scratch-par ...

  8. [转]ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)

    前一篇中我们已经了解了Action Filter 与 内置的Filter实现,现在我们就来写一个实例.就写一个防盗链的Filter吧. 首先继承自FilterAttribute类同时实现IAction ...

  9. Selenium 使用NPOI来实现report

    Selenium自动化测试过程中,模拟用户操作能实现后需要测试结果输出,这是一个比较重要的过程 1.用system.IO 读写来实现,如果使用这个方式,每个测试生成一个报告,容易开启太多的线程,占用内 ...

  10. Ruby require 路径问题

    require 负责引用一个外部文件,可以省略".rb"字样. 如: require 'foo.bar' 等价于 require 'foo' 在Ruby中,同一目录下的文件, 如 ...