Android 7.1.1 Launcher3 去除Quick Search Bar
程序员文章站
2022-06-30 14:20:31
...
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所在区域的。
将其置为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);
...