我的Launcher3的android版本是4.4.2
我们知道,hotseat是workspace最下面的那一排按钮,hotseat默认有4个view,
Launcher.xml文件里有hotseat的配置,它是hotseat容器的配置,
Hotseat.xml文件里配置的是cellLayout,说明hotseat里面是包含一个cellLayout的,
cellLayout的gravity设置为center
default_workspace.xml文件里配置的是hotseat里的favority,
也就是具体是哪几个应用
要实现显示title这个需求,我们得分析一下。
Launcher是有很强大的drag功能的,我尝试着将其中一个应用drag到workspace,
我发现它其实是有title的,于是我猜想可能是在某个地方将标题给隐藏了,
或者是底部的空间不够,没有地方显示title
带着这些猜想我去查阅了代码
LauncherModel.java这个类继承了BroadcastReceiver
里面有一个方法LoadWorkspace
switch(container){
......
case LauncherSettings.Favorites.Content_HOTSEAT:
sWorkspaceItems.add(info)
}
sWorkspaceItems是itemInfo,info是shortcutInfo
这里是用来加载hotseat的item的
绑定items首先调用的是Launcher.java里的bindItems方法
在这个方法里面调用了Workspace.java里的addInScreenFromBind方法
进入到addInScreenFromBind方法里,看到里面调用的是
Workspace.java的addInscreen方法。
这个方法里调用了
CellLayout.java里的addViewToCellLayout方法
注意到里面有一段代码:
if(child instanceof BubbleTextView){
BubbleTextView bubbleChild=(BubbleTextView)child;
bubbleChild.setTextVisibility(!mIsHotseat);
}
这段代码就是用来显示或者隐藏title的
我们进入到BubbleTextView.java这个类的setTextVisibility里面去
将else{super.setTextColor(res.getColor(android.R.color.transparent));}
改成else{super.setTextColor(mTextColor);}
这样做只是将title显示出来,不再隐藏,但titile并没有空间来显示
所以我们还需要改动布局,在Launcher2中是可以直接在xml文件中配置尺寸的
但在Launcher3中不能,Launcher3新增了一个类,叫做DynamiceGrid.java
这个类里面我们需要改动几个值的大小,让title有地方可以显示
第一个是hotseatBarHeightPx,将它的值由iconSizePx+4*edgeMarginP改成
(int)((iconSizePx+4*edgeMarginPx)*1.1)
也就是将整个hotseat的高度提高10%
第二个是hotseatCellHeightPx,将它的值由iconsizePx改成hotseatBarHeightPx
也就是讲hotseat里的item的高度由原来的iconsize改成hotseat的高度,
这也就是说父容器高度变大了,里面的item的高度也跟着变大
说了这么多,总结一下,其实就是改了两个地方
一个是BubbleTextView的setTextVisibility方法
一个是DynamicGrid里面的两个变量的值
改动完成后,就实现了想要的效果,说的不对的地方,请大侠帮忙指正,谢谢!