您的位置:首页 > 其它

Laucnher3如何实现给hotseat上的应用显示title

2015-07-17 10:03 183 查看
我的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里面的两个变量的值

改动完成后,就实现了想要的效果,说的不对的地方,请大侠帮忙指正,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: