前面已经写过Hotseat分析的文章,主要是讲解如何在Launcher里面配置以及修改Hotseat的参数。今天主要是讲解一下如何在Hotseat里面的Item显示名称。这个小问题昨天折腾了半天,最后幸亏我亲爱的女朋友大人提醒了我,才想到原因。在此十分感谢我女朋友大人的提醒,幸好她不是做程序员,不然我就要失业了O(∩_∩)O哈哈~

(PS:新建的QQ群,有兴趣可以加入一起讨论:Android群:322599434)

默认Hotseat里面的元素都没有标题

1、Hotseat隐藏文件夹标题

  刚开始想解决这个问题的想法是找到按钮对象生成的地方,修改一下就好了。因为我上次分析Hotseat的时候,记得有一个地方把Hotseat的按钮文字屏蔽了,我想只要打开就好。

//Edited by mythou
//http://www.cnblogs.com/mythou/
    if (container == LauncherSettings.Favorites.CONTAINER_HOTSEAT)
{
if(OWLLauncherDebug.HotSeat) Log.d(mythou, "addInScreen------->CONTAINER_HOTSEAT"); layout = mLauncher.getHotseat().getLayout();
child.setOnKeyListener(null); //隐藏Hotseat里面文件夹的名称
if (child instanceof FolderIcon)
{
((FolderIcon) child).setTextVisible(false);
}        //.........
     }

  上面这段代码是在Workspace里面addInScreen()的部分代码,是绑定workspace元素的时候调用的方法,里面的确有一个判断是否隐藏文件夹的名称,但是没看到隐藏普通快捷方式的代码。我先把文件夹标题隐藏的功能去掉,但是hotseat里面的文件夹还是没有名称。没办法,只能从头看看Hotseat上面那些快捷方式如何添加和加载。

2、Hotseat上Item如何生成

  Hotseat上面的快捷方式可以分为两种,一种是普通快捷方式,可以在default_workspace里面配置。另外一个是全部应用列表的按钮,这个实在Hotseat.java里面动态生成的。我们先看看普通的快捷方式如何生成,一般的快捷方式,通过加载default_workspace,这个过程跟workspace上面的按钮一样,前面已经有详细分析,这里不多说。我们主要看看如何生成快捷方式的对象,其实这个跟workspace也是一样,我们看看下面代码:

//Edited by mythou
//http://www.cnblogs.com/mythou/
  public void bindItems(ArrayList<ItemInfo> shortcuts, int start, int end)
{
     //.........for (int i=start; i<end; i++)
{
       //.........if(OWLLauncherDebug.HotSeat) Log.d("OWL_Launcher", "bindItems------->item="+item); switch (item.itemType)
{
case LauncherSettings.Favorites.ITEM_TYPE_APPLICATION:
case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:
           //生成Item的View对象
View shortcut = createShortcut((ShortcutInfo)item);
           //添加到对应的screen里面
workspace.addInScreen(shortcut, item.container, item.screen, item.cellX,
item.cellY, , , false);
break;
}
}
}

  上面是Launcher里面的bindItems()方法的部分代码,bindItems()这个方法,看过我前面分析Launcher数据加载的朋友应该不会陌生,这是绑定Launcher数据时候Launcher回调的一个方法,Hotseat的Item对象就在这里生成。调用了createShortcut()方法,下面我们看看createShortcut()是如何生成Item对象。

//Edited by mythou
//http://www.cnblogs.com/mythou/
  View createShortcut(int layoutResId, ViewGroup parent, ShortcutInfo info)
{
if(OWLLauncherDebug.HotSeat) Log.d("OWL_Lancher", "addInScreen------->info="+info);
//生成Item的快捷方式,Hotseat里面的按钮也是BubbleTextView
BubbleTextView favorite = (BubbleTextView) mInflater.inflate(layoutResId, parent, false);
favorite.applyFromShortcutInfo(info, mIconCache);
favorite.setOnClickListener(this);
return favorite;
}

  从这里可以看出,其实Hotseat里面的按钮也是BubbleTextView的对象,也就是跟一般的workspace里面的按钮一样。对象生成以后会添加到对应的Screen里面。前面Hotseat的文章我也说过,Hotseat其实也是一个CellLayout的screen。在程序里面是标记为最后一个screen。

3、Item添加到Hotseat

//Edited by mythou
//http://www.cnblogs.com/mythou/
  void addInScreen(View child, long container, int screen, int x, int y, int spanX, int spanY,
boolean insert)
{
if(OWLLauncherDebug.HotSeat) Log.d(OWL, "addInScreen------->screen="+screen);
final CellLayout layout;
     //针对Hotseat的对象做特殊处理 mythou
if (container == LauncherSettings.Favorites.CONTAINER_HOTSEAT)
{
if(OWLLauncherDebug.HotSeat) Log.d(OWL, "addInScreen------->CONTAINER_HOTSEAT"); layout = mLauncher.getHotseat().getLayout();
child.setOnKeyListener(null); //隐藏Hotseat文件夹标题
if (child instanceof FolderIcon)
{
// ((FolderIcon) child).setTextVisible(false);
}if(OWLLauncherDebug.HotSeat) Log.d(OWL, "addInScreen------->CONTAINER_HOTSEAT screen="+screen); if (screen < )
{
screen = mLauncher.getHotseat().getOrderInHotseat(x, y);
}
else
{//获取child的位置,返回true添加成功,false失败 这里其实是Hotseat里面Item的位置
x = mLauncher.getHotseat().getCellXFromOrder(screen);
y = mLauncher.getHotseat().getCellYFromOrder(screen);
} if(OWLLauncherDebug.HotSeat) Log.d(OWL, "addInScreen-------> x="+x + " y="+y); }
}

  上面就是把Hotseat里面元素添加到Hotseat对应的CellLayout里面去,里面有一部分针对Hotseat元素的特殊处理,也就是刚开始说的隐藏文件夹标题以及技术元素位置的代码。除了这些,我并没有找到隐藏按钮文字的方法。后来只能看看Hotseat里面另外一个按钮(AllAPP)能不能显示文字。

4、Hotseat的AllAPP按钮

//Edited by mythou
//http://www.cnblogs.com/mythou/
  void resetLayout()
{
     //清空Hotseat里面所有的元素
mContent.removeAllViewsInLayout(); //添加ALLAPP按钮
Context context = getContext();
LayoutInflater inflater = LayoutInflater.from(context);
//修改为自己定义的button配置application, mythou
BubbleTextView allAppsButton = (BubbleTextView)
inflater.inflate(R.layout.application, mContent, false);
     //设置allapp按钮的图片
allAppsButton.setCompoundDrawablesWithIntrinsicBounds(null,
context.getResources().getDrawable(R.drawable.all_apps_button_icon), null, null);
allAppsButton.setText(context.getString(R.string.all_apps_button_label));
allAppsButton.setContentDescription(context.getString(R.string.all_apps_button_label)); int width = allAppsButton.getWidth();
int heigh = allAppsButton.getHeight();
Log.d("OWL_HOTSEAT", "allAppsButton width="+width+" heigh="+heigh);
      
     //.........
  }

  上面是Hotseat.java里面的resetLayout()方法,前面也说了Hotseat里面的按钮分为两种,其中AllAPP按钮是代码里面生成的。最后也是调用addViewToCellLayout()方法,addViewToCellLayout()是CellLayout里面的方法,跟前面一样,会添加到CellLayout里面。

5、Hotseat显示Item标题

  前面说了半天都没说到如何修改显示标题。其实这个说起来很简单,Hotseat里面的元素,每个都保存了Item的标题,我还特意把数据打印出来看了,因为刚开始以为系统直接把标题数据删除了。之所以没有显示出来是因为Hotseat设置的高度太低,导致标题部分显示被屏蔽了,很实用也很囧的方法。另外可能会有人要问,既然从显示空间上限制了,为何还要加个判断文件夹标题隐藏?这个问题答案,只要你看看文件夹高度就知道了,自己实践一下才能印象深刻。

  我对Launcher的分析也有一段时间了,不过现在看来对这个程序还不了解,后面还是多花点时间,达到能随心所欲地修改才行!最后谢谢女朋友大人给我提醒,让我省了不少时间,O(∩_∩)O哈!

系列文章:

Android Launcher分析和修改1——Launcher默认界面配置(default_workspace)

Android Launcher分析和修改2——Icon修改、界面布局调整、壁纸设置

Android Launcher分析和修改3——Launcher启动和初始化

Android Launcher分析和修改4——初始化加载数据

Android Launcher分析和修改5——HotSeat分析

Android Launcher分析和修改6——页面滑动(PagedView)

Android Launcher分析和修改7——AllApp全部应用列表(AppsCustomizeTabHost)

Android Launcher分析和修改8——AllAPP界面拖拽元素(PagedViewWithDraggableItems)

Android Launcher分析和修改9——Launcher启动APP流程

Edited by mythou

原创博文,转载请标明出处:http://www.cnblogs.com/mythou/p/3211443.html 

Android Launcher分析和修改10——HotSeat深入进阶的更多相关文章

  1. Android Launcher分析和修改5——HotSeat分析

    今天主要是分析一下Launcher里面的快捷方式导航条——HotSeat,一般我们使用手机底下都会有这个导航条,但是如果4.0的Launcher放到平板电脑里面运行,默认是没有HotSeat的,刚好我 ...

  2. Android Launcher分析和修改13——实现Launcher编辑模式(1) 壁纸更换

    已经很久没更新Launcher系列文章,今天不分析源码,讲讲如何在Launcher里面添加桌面设置的功能.目前很多第三方Launcher或者定制Rom都有简单易用的桌面设置功能.例如小米MIUI的La ...

  3. Android Launcher分析和修改11——自定义分页指示器(paged_view_indicator)

    Android4.0的Launcher自带了一个简单的分页指示器,就是Hotseat上面那个线段,这个本质上是一个ImageView利用.9.png图片做,效果实在是不太美观,用测试人员的话,太丑了. ...

  4. Android Launcher分析和修改12——Widget列表信息收集

    很久没写Launcher分析的文章,最近实在太忙.今天七夕本来是想陪女朋友逛街 ,碰巧打台风呆在家里,就继续写一篇文章.今天主要是讲一下Launcher里面的Widget列表,这方面信息比较多,今天重 ...

  5. Android Launcher分析和修改9——Launcher启动APP流程

    本来想分析AppsCustomizePagedView类,不过今天突然接到一个临时任务.客户反馈说机器界面的图标很难点击启动程序,经常点击了没有反应,Boss说要优先解决这问题.没办法,只能看看是怎么 ...

  6. Android Launcher分析和修改6——页面滑动(PagedView)

    本来打算分析CellLayout的源码,不过因为它们之间是容器包含关系,所以打算先把PagedView分析.PagedView代码很多,今天主要是分析跟核心功能相关的代码.PagedView主要实现一 ...

  7. Android Launcher分析和修改7——AllApp全部应用列表(AppsCustomizeTabHost)

    今天主要是分析一下Launcher里面的所有应用列表.Android4.0 Launcher的所有应用列表跟2.X比较大的区别就是多了Widget的显示.下面会详细分析Launcher里面有关所有应用 ...

  8. Android Launcher分析和修改8——AllAPP界面拖拽元素(PagedViewWithDraggableItems)

    接着上一篇文章,继续分析AllAPP列表界面.上一篇文章分析了所有应用列表的界面构成以及如何通过配置文件修改属性.今天主要是分析PagedViewWithDraggableItems类,因为在我们分析 ...

  9. Android Launcher分析和修改4——初始化加载数据

    上面一篇文章说了Launcher是如何被启动的,Launcher启动的过程主要是加载界面数据然后显示出来, 界面数据都是系统APP有关的数据,都是从Launcher的数据库读取,下面我们详细分析Lau ...

随机推荐

  1. ACM差分约束笔记

    https://www.cnblogs.com/31415926535x/p/10463112.html 很早之前学最短路的时候就看了一眼差分约束,,当时以为这种问题不怎么会出现,,而且当时为了只为了 ...

  2. 深度学习中 droupout层是咋回事??

    参考这篇博文 博主写的非常好!   https://blog.csdn.net/program_developer/article/details/80737724 参考这篇博文 博主写的非常好!  ...

  3. QT-1-环境搭建QT5.4.1&MinGW4.9.1

    1.最近在电脑上尝试了搭建QT的环境,原本准备利用VS2013+QT5.51环境,虽然安装很容易但是部署程序时,我是没能做到部署到其他机器,原因还是DLL搞不定: 2.参考友善之臂的MiniTools ...

  4. BZOJ.4566.[HAOI2016]找相同字符(后缀数组 单调栈)

    题目链接 给定两个字符串,求它们有多少个相同子串.相同串的位置不同算多个. POJ3145简化版. 后缀自动机做法见这儿,又快又好写(一下就看出差距了..) //13712kb 4076ms #inc ...

  5. 洛谷.1110.[ZJOI2007]报表统计(Splay Heap)

    题目链接 附纯SplayTLE代码及主要思路: /* 可以看做序列有n段,Insert是每次在每一段最后插入一个元素 只有插入,没有删除,所以插入一个元素对于询问1影响的只有该元素与前边一个元素(同段 ...

  6. 潭州课堂25班:Ph201805201 爬虫基础 第十三课 cookie (课堂笔记)

    # -*- coding: utf-8 -*- # 斌彬电脑 # @Time : 2018/9/15 0015 4:52 #cookie 是服务器发给浏览器的特殊信息 # 可以理解为一个临时通行证 # ...

  7. C++ 动态存储空间的分配和释放 new与malloc的区别

    使用new申请空间: 特点: 1.没有名字,只能通过指针间接访问它们. 2.从堆中申请空间 分类: 变量: 语法:指针变量 = new 类型名; Delete 指针变量 举例:int *p; p=ne ...

  8. python 字符串的一些方法

    总结:# split 分割 ********# strip 脱 默认脱头尾的空格 ********# replace 替换 ********# join 插入 拼接 ********# format ...

  9. ADC and DAC Analog Filters for Data Conversion

    Figure 3-7 shows a block diagram of a DSP system, as the sampling theorem dictates it should be. Bef ...

  10. ALSA学习资料

    一.内核文档  Linux Sound Subsystem Documentation 二.一些API 1.snd_pcm_period_elapsed 2.snd_pcm_lib_buffer_by ...