修改Launcher应用程序列表的背景

平台:Android4.1
场景:Launcher的应用程序列表默认是黑色背景,客户要求将其修改为WallPaper背景。
时间:2013.3

在Launcher中,我们通常称为桌面的是Workspace,应用程序列表对应的是AppsCustomizeTabHost。
现要求将其背景与当前的墙纸同步,并有一定的灰度。
根据之前的经验,从Workspace到AppsCustomizeTabHost的切换,并不涉及到Activity的切换,而只是view之间的替换。并且为什么Launcher的Workspace会显示出墙纸呢?
在Launcher的AndroidManifest.xml中,对于Launcher这个activity设置了一个theme:Theme.Holo.Wallpaper.NoTitleBar。而Workspace和AppsCustomizeTabHost都属于Launcher这个activity,那为什么Workspace的背景是墙纸而AppsCustomizeTabHost的背景不是?
这说明从Workspace到AppsCustomizeTabHost的过程中,一些地方发生了改变。这些改变可能来自于两个方面:
(1).AppsCustomizeTabHost对应的布局文件
(2).Launcher这个activity在切换时代码执行的操作

从Launcher.java中可以得到mAppsCustomizeTabHost所对应的布局文件为apps_customize_pane.xml。其中

`android:background="#FF000000"`

将背景设置为了不透明黑色。尝试修改此处,将背景设置为透明,结果测试结果表现为:Workspace切换到AppsCustomizeTabHost时,不会想之前那样背景立马变黑,然后在切换的动画结束后背景变黑。
此处得出结论:apps_customize_pane.xml的android:background需要修改。
在Launcher.java代码中存在一个动画过程,其代码设置了关于墙纸显示方面的内容。

跟踪Launcher.java中代码,发现从Workspace切换到AppsCustomizeTabHost的关键函数为showAppsCustomizeHelper()。其中将调用到一个函数

updateWallpaperVisibility(false)

解决办法:具体的修改:
(1).apps_customize_pane.xml的android:background设为可接受的半透明状态,例如#d0000000
(2).修改Launcher.java的updateWallpaperVisibility()函数,使得其设置墙纸一直存在:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER, WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER);

(3).在Workspace切换到AppsCustomizeTabHost过程中,涉及到动画效果,将分别回调两个View中的onLauncherTransitionPrepare()和onLauncherTransitionEnd()等方法。为了效果更佳好,即在切换的开始就将Workspace这个图层隐藏。
默认是在动画结束的时候隐藏。修改AppsCustomizeTabHost.java文件的onLauncherTransitionEnd()和onLauncherTransitionPrepare()函数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值