美文网首页
android自定义StatusBar车机版(一、加载自己的导航

android自定义StatusBar车机版(一、加载自己的导航

作者: MrDemo | 来源:发表于2024-04-09 13:41 被阅读0次

我这边修改的是车机版本,所以对应的包名都是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);
    }
}

相关文章

网友评论

      本文标题:android自定义StatusBar车机版(一、加载自己的导航

      本文链接:https://www.haomeiwen.com/subject/gbjfxjtx.html