android FakeWindow的小应用大用途
来源:互联网 发布:c语言打印红色爱心 编辑:程序博客网 时间:2024/05/16 17:18
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,怎么申请全屏的设计很简单,笔者在去年的博文中介绍过,需要看的看看这个【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()这个函数来添加的,具体参数可以看看这个函数原型,也很简单的,具体可在下面这两个文件中看看:
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驾驭你的页面
- meta的大用途
- 小身材 大用途 Nokia Monitor Test
- Linux中小小 grep 命令 大用途
- Android C++的用途
- android:contentDescription 的用途
- android:contentDescription 的用途
- android requestDisallowInterceptTouchEvent的用途
- android:contentDescription 的用途
- android:contentDescription 的用途
- android:contentDescription 的用途
- android:contentDescription 的用途
- android:contentDescription 的用途
- android:contentDescription 的用途
- android:contentDescription 的用途
- android:contentDescription 的用途
- 的用途及实际应用
- 继续学习教育软件注册说明
- keystone 手动建立租户,用户,角色,服务,端口
- java读取txt文件内容,存放到list的方法
- 宿舍更换的新淋浴喷头"水温vs旋钮角度"关系的研究(曲线)
- showAppMsg
- android FakeWindow的小应用大用途
- acm.hdu.edu.cn_(1)
- nyoj-453 小珂的烦恼(威佐夫博弈 )
- Android 编程下 java.lang.NoClassDefFoundError: cn.jpush.android.api.JPushInterface 报错
- Nginx学习(4)—HelloNginx(1)
- 《算法导论》笔记 第14章 总结与思考
- 为linux网卡添加多个IP
- E
- 开博了!!礼花上!!