Android菜鸟之学习android源码之三(修改系统默认横屏)
来源:互联网 发布:spss案例数据免费下载 编辑:程序博客网 时间:2024/05/20 14:43
好多小伙伴在开发平板产品的时候都会接到把系统默认竖屏改成默认横屏的任务,网上查了许多的文章,有说改底层的c++文件的,有说改系统编译出来的一些配置文件的,众说纷纭,我当初也踩过了不少的坑,最终发现一种比较靠谱的方式,那就是修改WindowManagerService,这个类是位于framework里的,修改后需要对整个framework进行模块编译后替换掉系统的framework.jar这个包,这个类的具体路径是
platform\frameworks\base\services\core\java\com\android\server\wm\WindowManagerService.class
具体改动的地方看代码吧,
public int getOrientationFromWindowsLocked() { .... -- return (mLastWindowForcedOrientation=ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); ++ return (mLastWindowForcedOrientation=ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }
/* * Determine the new desired orientation of the display, returning * a non-null new Configuration if it has changed from the current * orientation. IF TRUE IS RETURNED SOMEONE MUST CALL * setNewConfiguration() TO TELL THE WINDOW MANAGER IT CAN UNFREEZE THE * SCREEN. This will typically be done for you if you call * sendNewConfiguration(). * * The orientation is computed from non-application windows first. If none of * the non-application windows specify orientation, the orientation is computed from * application tokens. * @see android.view.IWindowManager#updateOrientationFromAppTokens( * android.os.IBinder) */ boolean updateOrientationFromAppTokensLocked(boolean inTransaction) { long ident = Binder.clearCallingIdentity(); try { int req = getOrientationFromWindowsLocked(); if (req == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) {-- mForcedAppOrientation = req;-- req = getOrientationFromAppTokensLocked(); ++req=ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; } if (req != mForcedAppOrientation) { -- mForcedAppOrientation = req; ++ mForcedAppOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;.... }
boolean computeScreenConfigurationLocked(Configuration config) {.... if (config != null) { -- config.orientation = (dw <= dh) ? Configuration.ORIENTATION_PORTRAIT:Configuration.ORIENTATION_LANDSCAPE; ++ config.orientation = Configuration.ORIENTATION_LANDSCAPE; }.... return true; }
修改这几处代码便能把系统默认的竖屏变成横屏,但是会有其他的应用出现问题,比如拨号盘原本竖屏显示的,但是在这种横屏模式下打开拨号盘会报空指针错误,进源码一看原来拨号盘也准备了两套的布局,一套横屏一套竖屏的,单独修改windowmanagerservice后不知道为什么这些系统应用没有变成竖屏模式,或许是时间仓促,并没有对windowmanagerservice的流程作很详细的分析,以后有时间再找机会研究下这个流程吧。
0 0
- Android菜鸟之学习android源码之三(修改系统默认横屏)
- Android菜鸟之学习android源码之四(修改系统默认字体尺寸)
- Android菜鸟之学习android源码之二(SystemUI导航栏初步认识及修改)
- Android 系统默认参数的修改之系列(一)
- Android学习之系统默认路径
- Android学习之系统默认路径
- android修改系统源码之修改系统滑动锁
- Android 系统默认参数的修改之系列(二)
- android菜鸟学习之路
- Android系统移植与调试之------->如何修改Android的默认语言、默认时区
- Android系统移植与调试之------->如何修改Android的默认语言、默认时区
- Android系统移植与调试之------->如何修改Android的默认语言、默认时区
- Android FM模块学习之四源码解析(三)
- Android菜鸟进阶之路三-Fragment
- Android系统移植与调试之-------)如何修改Android系统默认显示
- Android游戏开发菜鸟之路(三)
- 菜鸟进阶之Android Touch事件传递(三)
- Android回顾之修改默认输入法
- 根据前序遍历和中序遍历树构造二叉树
- TQ2440的AD驱动
- 开源框架
- 重载运算符
- html事件绑定总结以及window.onload和document.body.onload事件
- Android菜鸟之学习android源码之三(修改系统默认横屏)
- Win32环境下编译Caffe应用
- POJ 1061 青蛙的约会【exgcd】
- 微信小程序常见问题汇总
- webconfig添加<staticContent> <mimeMap>
- 正则表达式
- Android设置圆角图,如两个圆角--工具类
- Activity启动模式 及 Intent Flags 与 栈 的关联分析
- springboot data rest 2