动态修改ICON图标

1.在AndroidManifest.xml文件中添加多个activity-alias,其中:
name:要与Java代码中保持一致;
enable:多个activity-alias最好只有一个设置为true,其他均为false,如果设置多个activity-alias该属性为true,则桌面会有多个对应图标;
icon:图标
label:应用桌面显示名称
targetActivity:该activity-alias启动时的activity,此处多个activity-alias可以指向不同的activity,启动时分别对应不同的页面

<activity-alias
    android:name=".icon1"
    android:enabled="true"
    android:icon="@drawable/icon1"
    android:label="your icon1"
    android:targetActivity=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        intent-filter>
    activity-alias>

2.删除AndroidManifest.xml文件中原MainActivity中如下配置:

<category android:name="android.intent.category.LAUNCHER" />

3.在Java代码中实现切换

private void switchIcon(int useCode) {
    try {
        PackageManager pm = getPackageManager();

        //要跟manifest的activity-alias 的name保持一致
        String icon1 = "com.example.zs.switchicon.icon1";
        String icon2 = "com.example.zs.switchicon.icon2";

        ComponentName cn1=new ComponentName(getBaseContext(),icon1);
        ComponentName cn2=new ComponentName(getBaseContext(),icon2);

        if (useCode == 1){//换为icon1
            pm.setComponentEnabledSetting(cn1,
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);
            pm.setComponentEnabledSetting(cn2,
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);
        }else if(useCode == 2){//换为icon2
            pm.setComponentEnabledSetting(cn1,
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);
            pm.setComponentEnabledSetting(cn2,
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

遇到的问题:调用切换方法后,需要数秒时间,才能完成实际的切换

你可能感兴趣的:(安卓开发)