好吧,我还是先上两张张图吧(前一张是没修改的图,后一张是修改过的图)。。。。
本来在settings图片的地方是浏览器的,现在我们要做的就将之改为settings(当然你也可以添加另外的图标实现功能):
我们在源代码中找到Launcher2(桌面源码),找到launcher.java,里面setContentView(R.layout.launcher);说明它引用lanucher.xml文件,那么我们就在launcher的src下去找
launcher.xml文件(在layout-land下),里面有<ImageView/>代码,这就是显示浏览器图标的,那么我们将其中的android:src="@drawable/hotseat_browser_normal"改为android:src="@drawable/"ic_launcher_settings"(settings的图标当然要自己放到图片文件夹里面,没有动画图片就用这一张,在dramwale下还有一个hotseat_browser.xml文件将里面的图片名也改为settings的图片名,就是没有图标变动的效果)
就将浏览器的图标改为settings的图标了。。。
我们再找到launcher.java中的loadHotseats() 方法,里面有mHotseatConfig = getResources().getStringArray(R.array.hotseats);和getResources().obtainTypedArray(R.array.hotseat_icons);那么我们的去改array.xml文件了,
改为:<string-array name="hotseats" translatable="false">
<item>intent:#Intent;action=android.intent.action.DIAL;end</item>
<item>*Settings*(可以随便啦,因为在后面将会进行判断是否等于*Settings*)</item>
</string-array>
<array name="hotseat_icons" translatable="false">
<item>@drawable/hotseat_phone</item>
<item>@drawable/ic_launcher_settings</item>
</array>
最重要的部分来了: 在loadHotseats() 方法里面有PackageManager pm = getPackageManager();
for (int i=0; i<mHotseatConfig.length; i++) {
Intent intent = null;
if (mHotseatConfig[i].equals("*Settings*")) {
// magic value meaning "launch user's default web browser"
// replace it with a generic web request so we can see if there is indeed a default
String defaultUri = getString(R.string.default_browser_url);
intent = new Intent(
Intent.ACTION_VIEW,
((defaultUri != null)
? Uri.parse(defaultUri)
: getDefaultBrowserUri())
).addCategory(Intent.CATEGORY_BROWSABLE);
意思大概为为启动浏览器添加intent,因此我们将 String defaultUri = getString(R.string.default_browser_url);
intent = new Intent(
Intent.ACTION_VIEW,
((defaultUri != null)
? Uri.parse(defaultUri)
: getDefaultBrowserUri())
).addCategory(Intent.CATEGORY_BROWSABLE);
改为intent = new Intent("com.android.settings");
intent.setClassName("com.android.settings", "com.android.settings.Settings"); //前面一个是包名,后一个是类名
就ok了。。。(当然launcher.java中的getDefaultBrowserUri()方法也没有用了。。。删不删都可以)
最后就编译一下launcher2,将生成的launcher2.apk替换机器里面的就完成了。