微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 如何修改navigation bar为半透明?

如何修改navigation bar为半透明?

时间:10-02 整理:3721RD 点击:
[DESCRIPTION]
Navigation bar是google 从4.0版本开始支持的feature,默认情况下这个feature对应的
option是关闭的,需要通过修改config 文件来开启。开启navigation bar的方法和注意事项
,请参考FAQ:如何开启navigation bar。
如果想要做到,在开启navigation bar的情况下,可以透过navigation bar的背景看到
navigation bar后面的内容(也就是修改navigation bar为半透明),应该如何修改?
修改前后的效果图对比如下:


   修改前             修改后
[SOLUTION]
1,alps\php?mod=tag&id=6090" target="_blank" class="relatedlink">Frameworks\base\packages\SystemUI\res\Layout\navigation_bar.xml,
把background修改成statusbar_background的背景图:
android:background="@drawable/statusbar_background"
2,制作一张半透明的9.png图片,名字叫statusbar_background.9.png,放到
alps\frameworks\base\packages\SystemUI\res\drawable-hdpi下
3,alps\frameworks\base\packages\SystemUI\src\com\android\
systemui\statusbar\phone\PhoneStatusBar.java
修改方法getNavigationBarLayoutParams,如下:
private WindowManager.LayoutParams getNavigationBarLayoutParams() {
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
. . .
/*PixelFormat.OPAQUE*/ PixelFormat.TRANSLUCENT); //mtk added
. . .
4,WindowManagerService.java中
修改方法updateWallpaperOffsetLock,如下:
boolean updateWallpaperOffsetLocked(WindowState wallpaperWin, int dw, int
dh,boolean sync) {
. . .
if (wallpaperWin.mYOffset != offset) {
if (DEBUG_WALLPAPER) Slog.v(TAG, "Update wallpaper "
+ wallpaperWin + " y: " + offset);
changed = true;
wallpaperWin.mYOffset = offset; // 修改成wallpaperWin.mYOffset = 0;
}
. . .
对于JB的版本,还需要修改:
5, WindowManagerService.java
修改方法performLayoutLockedInner,如下:
private final void performLayoutLockedInner(boolean initial, boolean
updateInputWindows) {
if (!mLayoutNeeded) {

for (i = N-1; i >= 0; i--) {
final WindowState win = mWindows.get(i);
//mtk added
If (win.mIsWallpaper)
mSystemDecorRect.bootom = 屏幕高度; //以480*800分辨率来说,这里的屏幕高度就是800
//mtk added

}
对于JB2之后的版本,google对WMS的架构进行调整,暂不支持navigation bar透明,请在JB2之后
的版本不做做此修改
注意:
修改navigation bar半透明后存在的限制:
- 从那些以wallpaper作为背景的画面(画面对应的window具备属性:FLAG_SHOW_WALLPAPER)
切换到不显示wallpaper的画面,会在navigation bar的背景上先闪一下wallpaper,然后
navigation bar的背景才变成黑色。
- 如果希望某些特定的window才可以让navigation bar半透明,其他window上navigation
bar仍然不透明,例如:只在launcher画面做到navigation bar半透明,其他画面
navigation bar仍然保持原来的风格,目前不做支持。
- WVGA上开启navigation bar本身就有很多问题,建议不要在WVGA分辨率下开启navigation
bar功能。
- Navigation bar半透明的功能只针对当前的wallpaper是ImageWallpaper的情况,对
Live Wallpaper不生效,后续也不做更多支持。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top