修改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()函数。

你可能感兴趣的:(修改Launcher应用程序列表的背景)