android launcher3 home页简易分析
最近在修改一个问题:就是修改home页下,用户手动拖出来的APP图片下面的字体显示不全,思路比较明确,需要尽量加大整个APP控件的高度,或者缩小图片和文字之间的间隔.
跟代码发现APP整个控件的layout由一个被成为CellLayout的layout控制,而且高度是根据屏幕剩余高度等分的,所以,加大整个控件的高度变的不现实.那么只能采取缩小图片和文字之间的间隔的方法了.
下面给出跟到整个值的过程:
首先搞明白,整个launcher并没有套用layout.xml文件来构建布局,而是通过源码自定义了许多控件,这就涉及到整个自定义空间的流程,包括属性的定义,调用和获取,onMesure,onLayout,onDraw方法的复写,这里简单提下以上3种用途和场景,onMesure方法顾名思义,主要是用来重新测量自定义控件的高度和宽度,就是设置它的dimesion,一般所有自定义VIEW都需要复写这个方法,onLayout则主要是ViewGroup需要复写这个方法,其作用给这个ViewGroup下子View布局好显示的位置,onDraw则是需要真真正正画出内容的控件需要复写的方法,比如textview,或者其子类,其最终利用一个很重要的类Canvas的对象来实现一系列的画图,比如canvas.drawcircle,canvas.drawline.
然后再讲讲home界面一个布局情况:从LauncherRootView开始,-->DragLayer-->WorkSpace-->CellLayout-->ShortcutAndWidget-->BubbleTextView.而BubbleTextView继承于TextView,是真正需要画出来的内容,而中间几个类都是自动义Layout,进行层层嵌套,所以需要都复写自己的OnMeasure方法,你就会发现堆栈结构里就是循环的在调用OnMeasure方法,同理因为这些类都是ViewGroup,所以也都需要复写onLayout方法,堆栈里也就是循环调用onLayout.分析发现,我们关心的不是它怎么画出来,而是画的时候高,宽的数据是怎么得到,自然我们不要关心Ondraw方法,甚至不需要关心OnLayout方法,因为Onlayout方法只关心位置信息,而控件的高和宽是OnMesure方法决定的,所以我们只要跟OnMesure.
于是我找到ShortcutAndWidget下的measureChild方法,其就是在ShortcutAndWidget的OnMesure方法下,只不过是封装了下而已.这个是最底层的OnMesure复写方法了,因为BubbleTextView并没有复写这个方法,因为他继承于TextView,直接调用TextView的OnMesure方法就好.而在measureChild你会发现一个很重要的类,就是DeviceProfile,看相关代码:
public void measureChild(View child) {
final LauncherAppState app = LauncherAppState.getInstance();
final DeviceProfile grid = app.getDynamicGrid().getDeviceProfile();
final int cellWidth = mCellWidth;
final int cellHeight = mCellHeight;
......
}
其中对象grid 故名思议, 就是格子的意思,其中包含许多属性,用来控制以上所有提到布局和控件的位置关系,就相当于上面的布局和控件都是一个个壳,至于这些壳怎么嵌套都需要这个类的数据来提供支持.下面给出这个类一部分域:
public class DeviceProfile {
public static interface DeviceProfileCallbacks {
public void onAvailableSizeChanged(DeviceProfile grid);
}
.....
.....
int iconSizePx;
int iconTextSizePx;
int iconDrawablePaddingPx;
int cellWidthPx;
int cellHeightPx;
int allAppsIconSizePx;
int allAppsIconTextSizePx;
int allAppsCellWidthPx;
int allAppsCellHeightPx;
int allAppsCellPaddingPx;
int folderBackgroundOffset;
int folderIconSizePx;
int folderCellWidthPx;
.....
.....
}
其中红色标注的就是我们需要找的域,再来看看它是怎么得到的,可以看到在updateIconSize方法下有这样一句代码:
allAppsCellHeightPx = allAppsIconSizePx + drawablePadding + iconTextSizePx;
现在开始就很明朗了,drawablePadding 就是我们需要改的值,看看这个值是怎么来的,它是通过int drawablePadding = iconDrawablePaddingOriginalPx;赋值的来,
而全局域iconDrawablePaddingOriginalPx则是通过iconDrawablePaddingOriginalPx=res.getDimensionPixelSize(R.dimen.dynamic_grid_icon_drawable_padding); 得到
所以最后我们只要找到相关的xml文件修改dynamic_grid_icon_drawable_padding这个值就行了.
本篇完结,与大家共勉.
android launcher3 home页简易分析的更多相关文章
- Web Scraper 翻页——利用 Link 选择器翻页 | 简易数据分析 14
这是简易数据分析系列的第 14 篇文章. 今天我们还来聊聊 Web Scraper 翻页的技巧. 这次的更新是受一位读者启发的,他当时想用 Web scraper 爬取一个分页器分页的网页,却发现我之 ...
- 1.Android 视图及View绘制分析笔记之setContentView
自从1983年第一台图形用户界面的个人电脑问世以来,几乎所有的PC操作系统都支持可视化操作,Android也不例外.对于所有Android Developer来说,我们接触最多的控件就是View.通常 ...
- (转)Android 系统 root 破解原理分析
现在Android系统的root破解基本上成为大家的必备技能!网上也有很多中一键破解的软件,使root破解越来越容易.但是你思考过root破解的 原理吗?root破解的本质是什么呢?难道是利用了Lin ...
- [Android]Android系统启动流程源码分析
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5013863.html Android系统启动流程源码分析 首先 ...
- Android PopupWindow的使用和分析
Android PopupWindow的使用和分析 PopupWindow使用 PopupWindow这个类用来实现一个弹出框,可以使用任意布局的View作为其内容,这个弹出框是悬浮在当前activi ...
- Android笔记:触摸事件的分析与总结----TouchEvent处理机制
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://glblong.blog.51cto.com/3058613/1559320 ...
- Android Log日志文件的分析、查看
Log 在android中的地位非常重要,要是作为一个android程序员不能过分析log这关,算是android没有入门吧 . 下面我们就来说说如何处理log文件 什么时候会产生log文件呢 ?一般 ...
- 第四次作业——关于石墨文档(Android)客户端的案例分析
关于石墨文档(Android)客户端的案例分析 作业地址:[https://edu.cnblogs.com/campus/nenu/2016CS/homework/2505] 第一部分调研,评测 1. ...
- 【Orleans开胃菜系列2】连接Connect源码简易分析
[Orleans开胃菜系列2]连接Connect源码简易分析 /** * prism.js Github theme based on GitHub's theme. * @author Sam Cl ...
随机推荐
- 【译】iOS人性化界面指南(iOS Human Interface Guidelines)(一)
1. 引言1.1 译者自述 我是一个表达能力一般的开发员,不管是书面表达,还是语言表达.在很早以前其实就有通过写博客锻炼这方面能力的想法,但水平有限实在没有什么拿得出手的东西分享.自2015年7月以来 ...
- George and Cards
Codeforces Round #227 (Div. 2) E:http://codeforces.com/contest/387/problem/E 题意:给你一个n个数的序列,然后给你一个标准序 ...
- 从相对路径说开来(从C++到Qt)
从相对路径说开来(从C++到Qt) 转载自:http://blog.csdn.net/dbzhang800/article/details/6363165 在Qt论坛经常看到网友抱怨: QPixmap ...
- Mysql分页查询
取前5条数据 select * from table_name limit 0,5 或 select * from table_name limit 5 取第11条到第15条数据,共5条 select ...
- YII 主题
heming是一个在Web应用程序里定制网页外观的系统方式.通过采用一个新的主题,网页应用程序的整体外观可以立即和戏剧性的改变. 在Yii,每个主题由一个目录代表,包含view文件,layout文件和 ...
- Microsoft Office 2013 激活方法
Microsoft Office 2013 激活方法 Microsoft Office 2013是微软的新一代Office办公软件,全面采用Metro界面,包括Word.PowerPoint.Ex ...
- 【最短路】FOJ 2243 Daxia like uber
题目链接: http://acm.fzu.edu.cn/problem.php?pid=2243 题目大意: 给一张N个点M条边的有向图,从s出发,把在x1的人送到y1,在x2的人送到y2用的最短距离 ...
- zoj 1586
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1586 //zoj 1586 #include<iostream> ...
- 《A First Course in Probability》-chaper1-组合分析-方程整数解的个数
在概率论问题中求解基本事件.某个事件的可能情况数要涉及到组合分析. 而这一部分主要涉及到简单的计数原理和二项式定理.多项式定理. 我们从一个简单的实例入手. 方程的整数解个数: Tom喜欢钓鱼,一直他 ...
- POJ 2057 The Lost House
题意:一只蜗牛,它的房子在树上的某个叶子节点上,它要从树的根节点出发,寻找自己的房子.树的任意两个节点的距离为1,房子出现在每个叶子节点上的可能性一样.有的节点上有虫子,如果有虫子,虫子会告诉蜗牛它的 ...