我这边修改的是车机版本,所以对应的包名都是CarSystemUI的(如果是正常版本就把路径做变化去SystemUI里面修改就可以了)
一、新建自己的StatusBar,起名XXXX 并继承StatusBar
/home/ss/Work4.3-X9/buildsystem/android10/frameworks/base/packages/CarSystemUI/src/com/android/systemui/statusbar/car/XXXXStatusBar.java
二、修改配置项目,将XXXXStatusBar变成默认的StatusBar,修改路径与代码如下
/home/ss/Work4.3-X9/buildsystem/android10/frameworks/base/packages/CarSystemUI/res/values/config.xml
修改之前的代码
<!-- <string name="config_statusBarComponent" translatable="false">-->
<!-- com.android.systemui.statusbar.car.CarStatusBar-->
<!-- </string>-->
修改之后的代码
<!-- <string name="config_statusBarComponent" translatable="false">-->
<!-- com.android.systemui.statusbar.car.XXXXStatusBar-->
<!-- </string>-->
三、重写start与createNavigationBar方法,隐藏系统自带的导航栏,在createNavigationBar中调用如下代码
mNavigationBarController.createNavigationBars(false /* includeDefaultDisplay */, result);
四、通过mWindowManager加载自己的导航栏
mNavigationBarWindow = (ViewGroup) View.inflate(mContext,
R.layout.nav_layout, null);//此处为你想要加载的导航栏
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_NAVIGATION_BAR,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
| WindowManager.LayoutParams.FLAG_SPLIT_TOUCH,
PixelFormat.TRANSLUCENT);
lp.setTitle("CarNavigationBar");
lp.windowAnimations = 0;
mWindowManager.addView(mNavigationBarWindow, lp);
五、完整代码如下
public class XXXXStatusBar extends StatusBar {
private static final String TAG = "CarStatusBar";
private ViewGroup mNavigationBarWindow;
@Override
public void start() {
super.start();
Log.e("htkj_test_status","start");
}
@Override
protected void createNavigationBar(@Nullable RegisterStatusBarResult result) {
Log.e("htkj_test_status","是不是我啊");
mNavigationBarWindow = (ViewGroup) View.inflate(mContext,
R.layout.nav_layout, null);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_NAVIGATION_BAR,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
| WindowManager.LayoutParams.FLAG_SPLIT_TOUCH,
PixelFormat.TRANSLUCENT);
lp.setTitle("CarNavigationBar");
lp.windowAnimations = 0;
mWindowManager.addView(mNavigationBarWindow, lp);
//隐藏之前的导航栏(虚拟按键)
mNavigationBarController.createNavigationBars(false /* includeDefaultDisplay */, result);
}
}