Launcher3 to Launchpad 01 布局修改

Launcher3 to Launchpad 01 布局修改

禁用相关布局 Todo list:

  • 禁用首页搜索框
  • 禁用 Hotseat
  • 禁用 DropTargetBar
  • 禁用上滑桌面展示 AllApps 弹窗
  • 禁用长按桌面展示选项菜单
  • 禁用长按 App 展示选项菜单
  • 禁用拖拽时桌面显示半透明遮罩
  • 禁用拖拽时桌面显示 App 目标位预览框

定义全局功能控制开关

java 复制代码
object LauncherFeatureConfig {

    /**
     * 控制 HotSeat 区是否展示
     */
    @JvmField
    val isHotseatEnable = false

    /**
     * 控制 DropTargetBar 区是否展示
     */
    @JvmField
    val isDropTargetBarEnable = false

    /**
     * 控制长按图标 OptionsPopup 是否展示
     */
    @JvmField
    val isAppOptionsPopupEnable = false

    /**
     * 控制长按桌面 OptionsPopup 是否展示
     */
    @JvmField
    val isWorkspaceOptionsPopupEnable = false

    /**
     * 控制上滑 AllApps 窗口是否展示
     */
    @JvmField
    val isAllAppsSheetEnable = false

    /**
     * 控制拖拽时 Workspace 半透明遮罩是否可见
     */
    @JvmField
    val isWorkspaceDraggingBgVisible = false

    /**
     * 控制拖拽 App 时目标位预览框是否可见
     */
    @JvmField
    val isAppDropLocationVisible = false
}

禁用相关布局

禁用搜索按钮

launcher3 目录下的 build.gradle 文件中找到 QSB_ON_FIRST_SCREEN, 将其值设为 false:

kotlin 复制代码
buildConfigField("boolean", "QSB_ON_FIRST_SCREEN", "false")

禁用 Hotseat

  1. 修改 default_workspace_axb.xml:
  • launcher:container=-101 表示容器为 Hotseat,清空所有相关配置
xml 复制代码
<!-- Hotseat (We use the screen as the position of the item in the hotseat) -->
<!-- Mail Calendar Gallery Store Internet Camera -->
<!-- <resolve
    launcher:container="-101"
    launcher:screen="0"
    launcher:x="0"
    launcher:y="0" >
    <favorite launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_EMAIL;end" />
    <favorite launcher:uri="mailto:" />
</resolve> -->
  1. 修改 launcher3/src/main/res/layout/launcher.xml 文件:
  • 隐藏 Launcher 中 Hotseat 布局
  • 通过 1 和 2 的修改 Hotseat 区不再展示
xml 复制代码
<include
    id="@+id/hotseat"
    layout="@layout/hotseat"
    android:visibility="gone" />
  1. 修改 launcher3/src/main/java/com/android/launcher3/DeviceProfile.java
  • 将 Hotseat 区尺寸置为 0
java 复制代码
// Disable HotSeat
private void updateHotseatIconSize(int hotseatIconSizePx) {
    // Resize HotSeat
    if (!LauncherFeatureConfig.isHotseatEnable) {
        hotseatCellHeightPx = 0;
        hotseatBarSizePx = 0;
        return;
    }

    // Ensure there is enough space for folder icons, which have a slightly larger radius.
    hotseatCellHeightPx = (int) Math.ceil(hotseatIconSizePx * ICON_OVERLAP_FACTOR);
    ...
  1. 修改 launcher3/src/main/java/com/android/launcher3/Hotseat.java
  • Hotseat 区不响应手势事件
java 复制代码
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    // We allow horizontal workspace scrolling from within the Hotseat. We do this by delegating
    // touch intercept the Workspace, and if it intercepts, delegating touch to the Workspace
    // for the remainder of the this input stream.
    if (!LauncherFeatureConfig.isHotseatEnable) {
        return false;
    }
    ...
}
  1. 修改 launcher3/src/main/java/com/android/launcher3/Workspace.java
  • Hotseat 区不响应创建文件夹
java 复制代码
boolean createUserFolderIfNecessary(View newView, int container, CellLayout target,
            int[] targetCell, float distance, boolean external, DragObject d) {
  // Block HotSeat to create folder
  if (!LauncherFeatureConfig.isHotseatEnable && container == LauncherSettings.Favorites.CONTAINER_HOTSEAT) {
      return false;
  }
  ...
}

private void manageFolderFeedback(float distance, DragObject dragObject) {
  if (distance > mDragTargetLayout.getFolderCreationRadius(mTargetCell)) {
      if ((mDragMode == DRAG_MODE_ADD_TO_FOLDER
              || mDragMode == DRAG_MODE_CREATE_FOLDER)) {
          setDragMode(DRAG_MODE_NONE);
      }
      return;
  }
  final View dragOverView = mDragTargetLayout.getChildAt(mTargetCell[0], mTargetCell[1]);
  ItemInfo info = dragObject.dragInfo;

  boolean userFolderPending = willCreateUserFolder(info, dragOverView, false);
  if (!LauncherFeatureConfig.isHotseatEnable) {
    boolean isHotseat = mLauncher.isHotseatLayout(mDragTargetLayout);
    userFolderPending = !isHotseat && userFolderPending;
  }

  if (mDragMode == DRAG_MODE_NONE && userFolderPending) {
    ...
  }
  ...
}

禁用 DropTargetBar

  1. 修改 launcher3/src/main/java/com/android/launcher3/DeleteDropTarget.java
  • supportsDrop 方法返回 isDropTargetBarEnable,控制是否展示 DeleteDropTarget:
java 复制代码
@Override
protected boolean supportsDrop(ItemInfo info) {
    return LauncherFeatureConfig.isDropTargetBarEnable;
}
  1. 修改 launcher3/src/main/java/com/android/launcher3/SecondaryDropTarget.java
  • supportsDrop 方法返回 isDropTargetBarEnable,控制是否展示 SecondaryDropTarget:
java 复制代码
@Override
protected boolean supportsDrop(ItemInfo info) {
    return LauncherFeatureConfig.isDropTargetBarEnable;
}

禁用上滑桌面展示 AllApps 弹窗

  1. 修改 launcher3/src/main/java/com/android/launcher3/touch/AllAppsSwipeController.java
  • canInterceptTouch 方法返回 false,控制不响应上滑事件
java 复制代码
@Override
protected boolean canInterceptTouch(MotionEvent ev) {
    // Disable AllAppsSheet
    if (!LauncherFeatureConfig.isAllAppsSheetEnable) {
        return false;
    }
    if (mCurrentAnimation != null) {
        // If we are already animating from a previous state, we can intercept.
        return true;
    }

禁用长按桌面展示选项菜单

  1. 修改 launcher3/src/main/java/com/android/launcher3/touch/WorkspaceTouchListener.java
  • onLongPress 方法中添加判断,控制不展示长按菜单
java 复制代码
@Override
public boolean onLongPress(MotionEvent ev) {
    ...
    if (LauncherFeatureConfig.isWorkspaceOptionsPopupEnable) {
        mLauncher.showDefaultOptions(mTouchDownPoint.x, mTouchDownPoint.y);
    }
    ...
}

禁用长按 App 展示选项菜单

  1. 修改 launcher3/src/main/java/com/android/launcher3/BubbleTextView.java
  • startLongPressAction 方法中添加判断,控制不展示长按菜单
java 复制代码
public PreDragCondition startLongPressAction() {
    // Disable app long press popup
    if (!LauncherFeatureConfig.isAppOptionsPopupEnable) {
        return null;
    }

    PopupContainerWithArrow popup = PopupContainerWithArrow.showForIcon(this);
    return popup != null ? popup.createPreDragCondition(true) : null;
}

禁用拖拽时桌面显示半透明遮罩

  1. 修改 launcher3/src/main/java/com/android/launcher3/Workspace.java
  • onDragStart 方法中添加判断,控制不展示半透明遮罩
java 复制代码
@Override
public void onDragStart(DragObject dragObject, DragOptions options) {
    ...
    if (LauncherFeatureConfig.isWorkspaceDraggingBgVisible) {
        // Always enter the spring loaded mode
        mLauncher.getStateManager().goToState(SPRING_LOADED);
    }
    ...
}

禁用拖拽 App 时目标位预览框

  1. 修改 launcher3/src/main/java/com/android/launcher3/CellLayout.java
  • mVisualizeDropLocation 变量的值设为 isAppDropLocationVisible
java 复制代码
private boolean mVisualizeDropLocation = LauncherFeatureConfig.isAppDropLocationVisible;

上面这些步骤做完,就可以获得一个干净的桌面了,下面往桌面添加所有应用图标。

相关推荐
coder_pig1 小时前
🤡 公司Android老项目升级踩坑小记
android·flutter·gradle
死就死在补习班2 小时前
Android系统源码分析Input - InputReader读取事件
android
死就死在补习班2 小时前
Android系统源码分析Input - InputChannel通信
android
死就死在补习班2 小时前
Android系统源码分析Input - 设备添加流程
android
死就死在补习班3 小时前
Android系统源码分析Input - 启动流程
android
雨白3 小时前
OkHttpClient 核心配置详解
android·okhttp
淡淡的香烟3 小时前
Android auncher3实现简单的负一屏功能
android
RabbitYao4 小时前
Android 项目 通过 AndroidStringsTool 更新多语言词条
android·python
RabbitYao4 小时前
使用 Gemini 及 Python 更新 Android 多语言 Excel 文件
android·python