Android 7.1.1 Launcher3 去除Quick Search Bar

来源:互联网 发布:手机怎么删除淘宝评论 编辑:程序博客网 时间:2024/06/05 06:47

Android 7.1.1 Launcher3 去除Quick Search Bar

先看看launcher3的主要界面组成
这里写图片描述
查看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所在区域的。
QSB_ON_FIRST_SCREEN为true

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

这里写图片描述
这里写图片描述

到此我们完成了第一步,接下来就是把悬浮的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);...