android4.0+版本修改状态栏透明的调试
2016-10-26 13:58
148 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。
近期被Launcher折磨的基本神魂颠倒,但是每一次的修改收到成效总是会有一点点欣喜。经过2天的查资料,做试验,看了网上各位达人的各种方法后总算完成了Status_bar的透明操作。
步骤很简单,过程却很纠结。
首先最开始想到的是状态栏背景图,于是乎找了很久的背景图,尝试更换了半透明和全透明的背景图到res文件,结果是失败的。
最后查代码,看xml文件,总算发现status_bar的背景设置是#FF000000,竟然是直接设置了颜色。所以果断的将颜色改为了#00000000,根据经验前两位为透明度参数,越小透明度越高。然后编译Framework,看效果,还是不行。有些泄气,怀疑是不是改错地方了,确认了多次说明还是不行。所以只能再次查资料。
此时看到一位达人的博客,在此借用一下。
首先找到Android/frameworks/base/policy/src/com/android/internal/policy/impl中的PhoneWindowManager.Java类
然后找到 public int getSystemDecorRectLw(Rect systemRect) 的方法
原来的方法内容是:
p ublic int getSystemDecorRectLw(Rect systemRect) {
systemRect.left = mSystemLeft;
systemRect.top = mSystemTop;
systemRect.right = mSystemRight;
systemRect.bottom = mSystemBottom;
if (mStatusBar != null) return mStatusBar.getSurfaceLayer();
if (mNavigationBar != null) return mNavigationBar.getSurfaceLayer();
return 0;
}
在这里修改该方法为
public int getSystemDecorRectLw(Rect systemRect) {
systemRect.left = mSystemLeft;
systemRect.top = mSystemTop;
systemRect.right = mSystemRight;
systemRect.bottom = mSystemBottom;
if (mStatusBar != null) return 0;
if (mNavigationBar != null) return 0;
return 0;
}
这里修改完毕以后,
进入android/frameworks/base/packages/SystemUI/res/layout目录下
找到navigation_bar.xml和status_bar.xml文件
然后把这个两个布局文件的background属性都修改为#00000000。
按照高手所说的,透明效果顺利实现。但是同时发现一个问题,在进入有些非全屏应用时状态栏已然不是透明的,因此这个地方还需要继续研究。顺便提一个透明效果实现后界面出现的问题,就是透明的状态栏看起来会有断层的感觉,原因不明,且发现整个界面会出现两边淡淡的黑色的渐变效果,因此在查过资料做过尝试后确定直接在Launcher.xml文件中直接去掉Launcher的android:background="drawable/workspace_bg"属性后一切正常,边缘的渐变效果消失。
此次修改到此结束,感谢。
近期被Launcher折磨的基本神魂颠倒,但是每一次的修改收到成效总是会有一点点欣喜。经过2天的查资料,做试验,看了网上各位达人的各种方法后总算完成了Status_bar的透明操作。
步骤很简单,过程却很纠结。
首先最开始想到的是状态栏背景图,于是乎找了很久的背景图,尝试更换了半透明和全透明的背景图到res文件,结果是失败的。
最后查代码,看xml文件,总算发现status_bar的背景设置是#FF000000,竟然是直接设置了颜色。所以果断的将颜色改为了#00000000,根据经验前两位为透明度参数,越小透明度越高。然后编译Framework,看效果,还是不行。有些泄气,怀疑是不是改错地方了,确认了多次说明还是不行。所以只能再次查资料。
此时看到一位达人的博客,在此借用一下。
首先找到Android/frameworks/base/policy/src/com/android/internal/policy/impl中的PhoneWindowManager.Java类
然后找到 public int getSystemDecorRectLw(Rect systemRect) 的方法
原来的方法内容是:
p ublic int getSystemDecorRectLw(Rect systemRect) {
systemRect.left = mSystemLeft;
systemRect.top = mSystemTop;
systemRect.right = mSystemRight;
systemRect.bottom = mSystemBottom;
if (mStatusBar != null) return mStatusBar.getSurfaceLayer();
if (mNavigationBar != null) return mNavigationBar.getSurfaceLayer();
return 0;
}
在这里修改该方法为
public int getSystemDecorRectLw(Rect systemRect) {
systemRect.left = mSystemLeft;
systemRect.top = mSystemTop;
systemRect.right = mSystemRight;
systemRect.bottom = mSystemBottom;
if (mStatusBar != null) return 0;
if (mNavigationBar != null) return 0;
return 0;
}
这里修改完毕以后,
进入android/frameworks/base/packages/SystemUI/res/layout目录下
找到navigation_bar.xml和status_bar.xml文件
然后把这个两个布局文件的background属性都修改为#00000000。
按照高手所说的,透明效果顺利实现。但是同时发现一个问题,在进入有些非全屏应用时状态栏已然不是透明的,因此这个地方还需要继续研究。顺便提一个透明效果实现后界面出现的问题,就是透明的状态栏看起来会有断层的感觉,原因不明,且发现整个界面会出现两边淡淡的黑色的渐变效果,因此在查过资料做过尝试后确定直接在Launcher.xml文件中直接去掉Launcher的android:background="drawable/workspace_bg"属性后一切正常,边缘的渐变效果消失。
此次修改到此结束,感谢。
相关文章推荐
- android4.0+版本修改状态栏透明的调试
- Android修改Framework-res.apk使状态栏背景颜色为黑色或透明
- android4.2.2修改状态栏透明
- 配置 release 版本调试状态的
- DLINQ 使用DataContext快速构建数据访问层DAL,发现Updata采用Attach(Entity t,true)困难重重!(如果实体声明了版本成员或者没有更新检查策略,则只能将它附加为没有原始状态的已修改实体)的解决办法!
- Android 沉浸式状态栏以及 透明状态栏 和修改状态栏颜色
- android沉浸式状态栏、变色状态栏、透明状态栏、修改状态栏颜色及透明
- Android系统移植与调试之------->如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
- VS2015 Xamarin调试android版本过低修改
- android 状态栏透明,源码修改教程
- android沉浸式状态栏、变色状态栏、透明状态栏、修改状态栏颜色及透明
- vs2010 修改程序代码,调试程序时,“当前不会命中断点,源代码与原始版本不同。” 的解决方案, 及vs调试时,不能修改源代码的解决方案。
- android4.2.2修改状态栏透明
- 【Android L】Material Design低版本实现之【应用主题并且修改状态栏颜色】
- android沉浸式状态栏、变色状态栏、透明状态栏、修改状态栏颜色及透明
- iOS调试技巧—调试状态修改UI
- Android透明状态栏(4.4以上版本)
- android4.2.2修改状态栏透明
- androidの4.4版本沉浸式透明状态栏与导航栏案例
- 2.3ROM修改状态栏透明详细教程 转帖