欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android 7.1.1 Launcher3 去除Quick Search Bar

程序员文章站 2022-06-30 14:20:31
...

Android 7.1.1 Launcher3 去除Quick Search Bar

先看看launcher3的主要界面组成
Android 7.1.1 Launcher3 去除Quick Search Bar
查看Launcher的代码

 private void setupViews() {
 ...
mWorkspace.bindAndInitFirstWorkspaceScreen(null /* recycled qsb */); 这里初始化了第一个屏幕 qsb就是在第一个屏幕
 ...

查看Workspace.bindAndInitFirstWorkspaceScreen 发现这里会去add qsb

  public void bindAndInitFirstWorkspaceScreen(View qsb) {
        if (!FeatureFlags.QSB_ON_FIRST_SCREEN) {
            return;
        }
        // Add the first page
   ...
        // Always add a QSB on the first screen.
        if (qsb == null) {
            // In transposed layout, we add the QSB in the Grid. As workspace does not touch the
            // edges, we do not need a full width QSB.
            qsb = mLauncher.getLayoutInflater().inflate(
                    mLauncher.getDeviceProfile().isVerticalBarLayout()
                            ? R.layout.qsb_container : R.layout.qsb_blocker_view,
                    firstPage, false);
        }
   CellLayout.LayoutParams lp = new CellLayout.LayoutParams(0, 0, firstPage.getCountX(), 1);
        lp.canReorder = false;
        if (!firstPage.addViewToCellLayout(qsb, 0, getEmbeddedQsbId(), lp, true)) {
            Log.e(TAG, "Failed to add to item at (0, 0) to CellLayout");
        }
    }
 ...

这里有个编译开关 FeatureFlags.QSB_ON_FIRST_SCREEN
QSB_ON_FIRST_SCREEN默认是true,qsb会在第一个屏幕的celllayout里占用位置而且无法移动。此时应用图标是无法拖拽到qsb所在区域的。
Android 7.1.1 Launcher3 去除Quick Search Bar

将其置为false后,qsb就不会添加到第一个屏幕的celllayout里也不会占用位置,但是第一个屏幕的QSB还是在的,它就像悬浮在应用图标上一样。

Android 7.1.1 Launcher3 去除Quick Search Bar
Android 7.1.1 Launcher3 去除Quick Search Bar

到此我们完成了第一步,接下来就是把悬浮的qsb给去掉了
查看Launcher相关代码

     private void setupViews() {
     ...
        mQsbContainer = mDragLayer.findViewById(mDeviceProfile.isVerticalBarLayout()
                ? R.id.workspace_blocked_row : R.id.qsb_container);
...

这里的 R.id.qsb_container就是悬浮qsb
详看layout-port 垂直的layout界面里的launcher.xml

        <!-- Keep these behind the workspace so that they are not visible when
             we go into AllApps -->
        <include layout="@layout/page_indicator"
            android:id="@+id/page_indicator" />

        <include
            android:id="@+id/drop_target_bar"
            layout="@layout/drop_target_bar_horz" />

        <include
            layout="@layout/qsb_container"
            android:id="@+id/qsb_container" />

这样的话我们只需要remove这个qsb view就哦科了

     private void setupViews() {
     ...
        mQsbContainer = mDragLayer.findViewById(mDeviceProfile.isVerticalBarLayout()
                ? R.id.workspace_blocked_row : R.id.qsb_container);
        mDragLayer.removeView(mQsbContainer);
...