Android Launcher3定制开发之去除搜索和开机引导

Posted by Toeii on May 11, 2020

前言

为了加深对Launcher3的整体印象,记录在工作上所遇到和解决的关于Launcher3定制开发的一些知识点,并且归纳总结成本系列文章。同时,也能起到帮助他人解决一些关于Launcher3相关定制的需求开发。

简介

用户在开启Launcher的时候,弹出默认的开启引导往往显得有些碍事,我们可以通过去除或者自定义引导完善业务场景。同时,本文也将教大家如何把首屏默认的google搜索栏小部件去除掉。

去除桌面引导

Launcher在初始化的时候,会通过shouldShowIntroScreen检查,是否是第一次运行。


    if (shouldShowIntroScreen()) {
        showIntroScreen();
    } else {
        showFirstRunActivity();
        showFirstRunClings();
    }

可以看到Launcher.showFirstRunClings方法,它处理了显示第一次运行的引导窗。那么,我们直接将代码屏蔽掉。


    @Thunk void showFirstRunClings() {
        //TODO 屏蔽开机引导提示
    //    LauncherClings launcherClings = new LauncherClings(this);
    //    if (launcherClings.shouldShowFirstRunOrMigrationClings()) {
    //        mClings = launcherClings;
    //        if (mModel.canMigrateFromOldLauncherDb(this)) {
    //            launcherClings.showMigrationCling();
    //        } else {
    //            launcherClings.showLongPressCling(true);
    //        }
    //    }
    }

自定义引导

结合上面的代码分析,可以看到Launcher.showFirstRunActivity方法中,它处理了第一运行的Activity。那么,我们可以在这个方法中启动自己想要替换的Activity,做到引导界面替换。由于这里已经阐述的很明确了,这里就不贴代码了,可以自己修改试一试。

去除预置Google搜索栏

在DeviceProfile类中找到layout方法,可以看出搜索栏在这里做了处理,那么我们将它隐藏就可以了。


  public void layout(Launcher launcher) {
        FrameLayout.LayoutParams lp;
        boolean hasVerticalBarLayout = isVerticalBarLayout();
        final boolean isLayoutRtl = Utilities.isRtl(launcher.getResources());
        View searchBar = launcher.getSearchDropTargetBar();
        ...
        searchBar.setLayoutParams(lp);
        //隐藏
        searchBar.setVisibility(View.GONE);
  }

结语

如果读完本文还有不懂的地方,可以结合代码加深理解,代码通过点击这里找到。希望对大家学习和了解Launcher开发有所帮助。