当前位置: 首页 > article >正文

Android13 Hotseat客制化--去掉hotseat(热座)

需求:有些项目不要热座,要求去掉热座

以前的做法是把DeviceProfile里与hotseat有关的变量改为0之类的,改动比较大。为什么不通过简单的把mHotseat设置为GONE呢

因为在各种视图变化的时候,会把hotseat再次显示出来,因此尝试新的方法来实现。

step1:把hotseat默认改为GONE 在launcher.xml里把hotseat设为gone

<!--Kevin.Ye set hotseat as gone-->
<include
android:id="@+id/hotseat"
layout="@layout/hotseat"
android:visibility="gone"/>

step2:为了兼容其他项目需要保留hotseat的功能,在FeatureFlag.java中添加flag

public static final boolean REMOVE_HOTSEAT = true;//Kevin.Ye added for removing hotseat

step3:在Launcher.java里的setupViews(),把mHotseat设为GONE

/**
     * Finds all the views we need and configure them properly.
     */
    protected void setupViews() {
        mDragLayer = findViewById(R.id.drag_layer);
        mFocusHandler = mDragLayer.getFocusIndicatorHelper();
        mWorkspace = mDragLayer.findViewById(R.id.workspace);
        mWorkspace.initParentViews(mDragLayer);
        mOverviewPanel = findViewById(R.id.overview_panel);
        mHotseat = findViewById(R.id.hotseat);
        mHotseat.setWorkspace(mWorkspace);
        mHotseatController = new HotseatController(this.getApplicationContext(),this);//Kevin.Ye
        if(FeatureFlags.REMOVE_HOTSEAT)
            mHotseat.setVisibility(View.GONE);//Kevin.Ye added for removing hotseat
        // Setup the drag layer
        mDragLayer.setup(mDragController, mWorkspace);

setup4:在Hotseat.java中的onVisibilityAggregated屏蔽所有的setVisibility操作,也许前面的步骤也不需要!不确定

@Override
public void onVisibilityAggregated(boolean isVisible) {
   super.onVisibilityAggregated(isVisible);
   if(getVisibility() != View.GONE)//Kevin.Ye added for set hotseat always GONE!
   setVisibility(View.GONE);
   if (mOnVisibilityAggregatedCallback != null) {
   mOnVisibilityAggregatedCallback.accept(isVisible);
   }
}

step5: Workspace.java中不要允许hotseat作为拖拽图标的目的Layout

private boolean shouldUseHotseatAsDropLayout(DragObject dragObject) {
        if(FeatureFlags.REMOVE_HOTSEAT) return false;//Kevin.Ye not allow hotseat as dragTarget
        if(mLauncher.getHotseatContainer().getVisibility() != View.VISIBLE) return false;//Kevin.Ye added for not allow drag to hotseat
        if (mLauncher.getHotseat() == null
                || mLauncher.getHotseat().getShortcutsAndWidgets() == null
                || isDragWidget(dragObject)) {
            return false;
        }
        View hotseatShortcuts = mLauncher.getHotseat().getShortcutsAndWidgets();
        getViewBoundsRelativeToWorkspace(hotseatShortcuts, mTempRect);
        return mTempRect.contains(dragObject.x, dragObject.y);
    }

step6: WorkspacePageIndicator.java里的setInsets接口修改一下,不要影响页面指示器的位置

 
            if(FeatureFlags.REMOVE_HOTSEAT)
                lp.bottomMargin = insets.bottom;//there is no hotseatBarSize
            else
                lp.bottomMargin = grid.hotseatBarSizePx + insets.bottom;
            
            lp.bottomMargin = insets.bottom + mMarginBottom;
            //Kevin.Ye modified end
        }
        setLayoutParams(lp);


http://www.kler.cn/a/298788.html

相关文章:

  • Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击
  • GPUStack v0.4.1 单节点与多节点安装与部署指南 Docker PowerShell
  • 【西安电子科技大学考研】25官方复试专业课参考书目汇总
  • 抓取手机HCI日志
  • 各种网站(学习资源及其他)
  • 直流有刷电机多环控制(PID闭环死区和积分分离)
  • tushare库获取金融股票数据
  • 如何使用Filter(过滤器一)
  • discuz论坛3.4 截图粘贴图片发帖后显示不正常问题
  • Java 利用ASM读取变量值(Field value)问题研究
  • 2024级新生数组字符串专题题解
  • Docker 容器技术在简化 MySQL 主从复制部署与优化
  • 快速入门游戏领域,开发游戏需要哪些技术?
  • Lua垃圾回收机制
  • 跨境网红营销SOP流程1.0丨出海笔记
  • 博科测试IPO上市关注:创新驱动发展,加速技术成果转化
  • 使用datax从mysql导入数据到taosdb中
  • Vue框架学习笔记-9
  • Android12——Launcher3文件夹布局修改调整
  • 鸿蒙HarmonyOS应用开发者高级认证重点知识详解
  • 2024国赛数学建模C题论文:基于优化模型的农作物的种植策略
  • 根据NVeloDocx Word模板引擎生成Word(一)
  • 【C++】容器list常用接口详解
  • vue3 嵌套iframe 通讯
  • Docker 安装FileBeat、Elasticsearch及Kibana详细步骤
  • 基于Pinia和Compute的持久化localStorage登录态管理Vuejs 源码教学