直接在navigation_bar.xml中找到三个虚拟按键的代码,复制到status_bar.xml中所需要放置的位置:
其中返回键back和主页键home都有一个属性 systemui:keyCode="",这就相当于系统默认的具体功能实现,无需再在java代码中添加onClickListener点击事件就能完成点击操作,是不是非常方便! 但是recent_apps这个最近运行的应用却没有这么方便的代码,它没有默认的systemui:keyCode=""这个属性。于是只能在代码中想办法了 ↓
此时来到android\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\路径下的PhoneStatusBar.java
在prepareNavigationBarView()方法中添加一行代码就能搞定recent_apps这个键的具体功能:
//Frank修改, 状态栏添加虚拟按键并设置点击监听
mStatusBarView.findViewById(R.id.recent_apps).setOnClickListener(mRecentsClickListener);
因为点击事件mRecentsClickListener里面已经封装好了所执行的操作,所以直接找到recent_apps这个控件然后设置点击事件就行了。是不是也很简单呢!但当时改的时候可是费了不少功夫阅读源码呢!
方案一:
直接将android\frameworks\base\packages\SystemUI\res\layout\路径下的navigation_bar.xml中的控件给gone掉。
但会导致三个虚拟按键消失了,但是下面还有一块横向占满全屏的黑色区域无法消失并占用空间。于是有了方案二的出现 ↓
方案二:
修改android/framework/base/core/res/res/values/config.xml中的
name="config_showNavigationBar">false
修改当前设备源码路径(当前设备是astar-ococci)android\device\softwinner\astar-ococci\overlay\frameworks\base\core\res\res\values\config.xml中的
name="config_showNavigationBar">false
以及android\device\softwinner\astar-y3\overlay\frameworks\base\core\res\res\values\config.xml中的
name="config_showNavigationBar">false
综上所述,综合方案一和方案二,能有效的使NavigationBar永久隐藏,并且不占用任何屏幕空间,任何点击操作都不会唤醒navigationBar重新出现。完美解决!
name="dynamic_grid_search_bar_height">18dp
public void setTextVisibility(boolean visible) { Resources res = getResources(); if (visible) { super.setTextColor(mTextColor); } else { // super.setTextColor(res.getColor(android.R.color.transparent)); super.setTextColor(mTextColor); //Frank, 将title显示出来,不再隐藏 } mIsTextVisible = visible; }(2).提升hotseat高度
hotseatBarHeightPx = iconSizePx + 4 * edgeMarginPx;
hotseatBarHeightPx = (int)((iconSizePx + 4 * edgeMarginPx) * 1.1); //Frank, 将整个hotseat的高度提高10%
hotseatCellHeightPx = iconSizePx;
替换成 ↓
hotseatCellHeightPx = hotseatBarHeightPx; //Frank修改, iconSizePx → hotseatBarHeightPx:将hotseat里的item的高度由原来的iconsize改成hotseat的高度。
name="hotseat_transpose_layout_with_orientation">false
(2).修改Hotseat.java文件中onFinishInflate()方法↓
if (grid.isLandscape && !grid.isLargeTablet()) { // mContent.setGridSize(1, (int) grid.numHotseatIcons); mContent.setGridSize((int) grid.numHotseatIcons, 1); //Frank,右侧横向排列5个图标 } else { mContent.setGridSize((int) grid.numHotseatIcons, 1); }
/** * 设置launcher默认壁纸 ** by Frank修改 */ private void setDefaultWallPaper() { //修改默认背景 OWL test,可以在Framework替换默认静态图default_wallpaper WallpaperManager mWallpaperManager = WallpaperManager.getInstance(this); try { mWallpaperManager.setResource(R.drawable.default_wallpaper); //此处default_wallpaper图片我已替换掉 } catch (IOException e) { Log.e("Frank", "set default wallpaper error"); e.printStackTrace(); } }