在安卓桌面程序的主界面我们可以看到是由QsbSearchBar(上方搜索框)、Workspace(页视图空间)、pageIndicator(页指示器)、hotseat(底部视图空间)四个部分组成,它们是基于DragLayer
层的基础上进行显示(注释掉 res/ 横屏模式layout-land 或 竖屏模式layout-port/launcher.xml中 android:id="@+id/drag_layer"对应的字段 会发现桌面上没有加载任何部件,DragLayer层属于最外层的布局,用来协调处理它的子view的动作事件,这里不再描述DragLayer层相关信息),下面说明关于hotseat布局的相关描述以及allapps调用的CellLayout的相关实现位置。

首先进入hotseat.java文件:

hotseat类继承于FrameLayout类型,在hotseat.java中可以到hotseat布局的相关信息(长按事件的绑定,hotseat事件的截获,X、Y坐标获取等),如果在launcher类(launcher.java)的事件函数中注释掉hotseat相关的点击、长按事件,那么hotseat布局内的app将变为摆设(无法触发事件)。

进入protected void onFinishInflate()函数:
DeviceProfile grid = mLauncher.getDeviceProfile();
首先获取设备的相关信息(行、列规格、桌面的方向等),桌面的排列方式和设备型号相关
(比如nexus5手机屏幕是1080P xxhdpi,规格为4*4 调用default_workspace_4x4.xml文件)mContent = (CellLayout) findViewById(R.id.layout);
调用的是res/layout/hotseat.xml文件 android:id="@+id/layout"对应的是res/layout,
如果你想做hotseat(包括allapps调用的cellLayout布局)相关的修改
(比如修改默认图标、事件触发图标,这只是其中一小部分),
查看layout相关的文件夹内的xml将是不错的选择(layout、layout-land等,
所有包含layout名称的文件夹)hotseat布局其实是一个CellLayout视图,桌面内所有的视图空间都有着相同的概念,
他们由相对应的控制器来管理...继续向下看:
if (grid.isLandscape && !grid.isLargeTablet) {mContent.setGridSize(1, (int) grid.inv.numHotseatIcons);} else {mContent.setGridSize((int) grid.inv.numHotseatIcons, 1);}
这里设置了hotseat布局的行和列(可以设置成2行2列或者更多,默认是1行)mContent.setIsHotseat(true);
这一句用来设置是否显示hotseat布局里的app是否显示对应的app名称,
修改为mContent.setIsHotseat(false);即可显示除allapps以外的所有app名称
后面描述allapps按钮名称的添加方法
进入void resetLayout()函数:mContent.removeAllViewsInLayout();
首先清除掉allapps按钮和allapps按钮进入的CellLayout空间// Add the Apps button
Context context = getContext();LayoutInflater inflater = LayoutInflater.from(context);
TextView allAppsButton = (TextView)inflater.inflate(R.layout.all_apps_button, mContent, false);
Drawable d = context.getResources().getDrawable(R.drawable.all_apps_button_icon);
mLauncher.resizeIconDrawable(d);
allAppsButton.setCompoundDrawables(null, d, null, null);
这些是关于allapps按钮的加载,
以及重设图标大小和图标的事件触发范围(感觉是整个桌面布局内的图标和范围都重新
刷新了一边),如果注释掉resetLayout()函数的调用将不会加载allapps按钮和刷新图标等相关工作allAppsButton.setContentDescription(context.getString(R.string.all_apps_button_label));
这里调用res/layout/all_apps_search_bar.xml,
找到android:contentDescription="@string/all_apps_button_label"字段便可发现,
只要在res下搜索string相关的xml文件,即可找到想要的信息下面重点来了,设置allapps名称的地方之一:if (mLauncher != null) {
mLauncher.setAllAppsButton(allAppsButton);allAppsButton.setOnTouchListener(mLauncher.getHapticFeedbackTouchListener());
allAppsButton.setOnClickListener(mLauncher);
allAppsButton.setOnLongClickListener(mLauncher);
allAppsButton.setOnFocusChangeListener(mLauncher.mFocusHandler);allAppsButton.setText("allapps按钮");
在if (mLauncher != null) 中增加上面这段语句,即可增加allapps的应用名称
}mContent.addViewToCellLayout(allAppsButton, -1, allAppsButton.getId(), lp, true);
这一条语句是把allAppsButton 按钮嵌入CellLayout布局

下面解析AllAppsContainerView.java文件(管理allapps按钮进入的桌面):

进入public void setSearchBarController(AllAppsSearchBarController searchController)函数:mSearchBarContainerView.setVisibility(/*View.VISIBLE*/View.GONE);这句话修改为View.GONE即可隐藏QsbSearchBar(allapps内的上方搜索框)
进入public boolean onLongClick(View v)函数:
在函数内最上方增加 if (true)return true;
取消长按按钮
在allapps内的CellLayout空间里长按屏幕中的app会出现一个新的拖动页面,用来把指定
app拖动到主桌面,如果不需要这个功能隐藏掉即可

关于allapps按钮进入的桌面目前只需要修改这么多,如果需要修改其他功能,参考相应的函数进行修改即可。

AOSP6.0.1相关文章*:

<AOSP6.0.1 launcher3入门篇—解析launcher.java文件>
<AOSP6.0.1 launcher3入门篇-解析DeviceProject.java及相关文件>

AOSP6.0.1 launcher3入门篇—hotseat相关实现相关推荐

  1. AOSP6.0.1 launcher3入门篇-解析DeviceProject.java及相关文件

    上一篇文章(AOSP6.0.1 launcher3入门篇-解析launcher.java文件)描述了launcher3的加载过程,本篇文章记录hotseat停靠方向和位置.隐藏页指示器.Folder大 ...

  2. AOSP6.0.1 launcher3入门篇—解析launcher.java文件

    安卓系统是市场占用率最高.用户使用率最多的手机系统.大部分安卓手机厂商在AOSP(Android Open Source Project)的基础上进行二次开发,定制符合自家设备使用的安卓系统.本篇文章 ...

  3. 《从零开始学习ASP.NET MVC 1.0》-开天辟地入门篇

    <从零开始学习ASP.NET MVC 1.0> 文章导航 (一) 开天辟地入门篇 (二) 识别URL的Routing组件 (三) Controller/Action 深入解析与应用实例 ( ...

  4. 洛谷入门篇的相关题解

    CF616A Comparing Two Long Integers 思路: 因为数字可能含有前导零,所以先对两个数字进行去除前导零的操作,操作后的两个数字如果位数相同,再逐位比较,否则,位数多的那个 ...

  5. 微信小程序开发【从0到1~入门篇】

    目录 1. 微信小程序介绍 1.1 什么是小程序? 1.2  小程序可以干什么? 2. 申请账号 2.1 申请帐号 2.2 测试号申请(我们小程序账号申请完成之后,建议务必要申请一个测试号用来开发) ...

  6. AOSP6.0.1 系统中增加新的category类型与app绑定,并在hotseat容器中加载app

    在launcher3(桌面程序)的hotseat中,可以通过修改dw_phone_hotseat.xml在指定位置加载指定app(仅限于已经指定category类型为APP_xxxx的app或者是系统 ...

  7. HwBinder入门篇-Android10.0 HwBinder通信原理(一)

    摘要:本节主要来讲解Android10.0 HwBinder的通信原理概要 阅读本文大约需要花费18分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平 ...

  8. linux入门_Linux超详细0基础入门篇(一)

    首先要感谢大康老师对我在Linux操作系统上的教导. 今天来讲一下用途广泛的Linux的基础入门教程 仅仅是做入门使用,如果想更加深入的学习那就需要自己做探索了. 本次例子使用的是kali linux ...

  9. Android Studio2.0 教程从入门到精通MAC版 - 安装篇

    来自:http://www.open-open.com/lib/view/open1466430392743.html 前言 这个教程你将学会如何使用Android Studio2.0开发Androi ...

最新文章

  1. 安卓第八夜 玛丽莲梦露
  2. 软件项目技术点(21)——自动保存和恢复
  3. spacy库的安装与使用_Python 安装、使用第三方库的一些经验
  4. Query Specific Fusion for Image Retrival 学习日常
  5. let finger cross
  6. C#中数组、ArrayList和List三者的区别(转) ,加修改
  7. ddr5内存上市时间_DDR5内存明年才能上市,SK Hynix已预研DDR6:12Gbps
  8. php启用 asynchdns,在 PHP 中使用 Promise + co/yield 协程
  9. 计算机网络之网络概述:1、基本概念
  10. 数仓系列 | 深入解读 Flink 资源管理机制
  11. 【中级】【后台】 微信小程序 - 腾讯云 - wafer2 - PHP - DEMO - 003 - 源码分析 - 03 - 腾讯后台初始化 和 CodeIgniter
  12. 支付宝集五福活动参与人数超4.5亿 你分到了多少?
  13. Leetcode 448. Find All Numbers Disappeared in an Array
  14. 电脑位数怎么看_怎么用电脑播放4K视频?怎么用电脑看4K电影? 附带详细教程...
  15. 《促进大数据发展行动纲要》发布 部署三大任务助力经济转型
  16. 端口映射不能访问80端口
  17. windows启动修复_如何使用Windows启动修复工具修复启动问题
  18. python123测试4四位玫瑰数_心理测试:4朵玫瑰,你最喜欢哪一朵?测测你这辈子会有多少情债...
  19. 关于苹果开发者账号应用的那些事
  20. java什么是this_java中的this是什么

热门文章

  1. 我说我精通字符串,面试官竟然问我Java中的String有没有长度限制!?|附视频讲解
  2. 阿里云原生张羽辰:服务发现技术选型那点事儿
  3. Jeecg-Boot 2.1.4 版本发布,基于SpringBoot低代码平台
  4. 总结各类损失函数【修】
  5. cycle/Pix2Pix 模型
  6. spring cloud微服务分布式云架构-Spring Cloud简介
  7. Spark2.3.1在Idea控制台调整日志等级
  8. 一起来学SpringBoot | 第四篇:整合Thymeleaf模板
  9. svn中status为missing的文件的处理方式
  10. webapp开发学习--Ionic+Cordova 环境搭建