(冷门知识)安卓动态更换应用图标

在 Android中动态更改应用图标。废话不多直接开撸:
第一步:首先准备备用图标:
ic_icon_1.xml

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="108dp"
    android:height="108dp"
    android:viewportWidth="108"
    android:viewportHeight="108">
    <path
        android:fillColor="#F44336"
        android:pathData="M4,0 h100 a4,4 0 0 1 4,4 v100 a4,4 0 0 1 -4,4 h-100 a4,4 0 0 1 -4,-4 v-100 a4,4 0 0 1 4,-4 z" />
    <path
        android:fillColor="#FFFFFF"
        android:pathData="M36,54 a18,18 0 1,0 36,0 a18,18 0 1,0 -36,0" />
</vector>

ic_icon_1.xml

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="108dp"
    android:height="108dp"
    android:viewportWidth="108"
    android:viewportHeight="108">
    <path
        android:fillColor="#4CAF50"
        android:pathData="M4,0 h100 a4,4 0 0 1 4,4 v100 a4,4 0 0 1 -4,4 h-100 a4,4 0 0 1 -4,-4 v-100 a4,4 0 0 1 4,-4 z" />
    <path
        android:fillColor="#FFFFFF"
        android:pathData="M36,36 h36 v36 h-36 z" />
</vector>

ic_icon_2.xml

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="108dp"
    android:height="108dp"
    android:viewportWidth="108"
    android:viewportHeight="108">
    <path
        android:fillColor="#2196F3"
        android:pathData="M4,0 h100 a4,4 0 0 1 4,4 v100 a4,4 0 0 1 -4,4 h-100 a4,4 0 0 1 -4,-4 v-100 a4,4 0 0 1 4,-4 z" />
    <path
        android:fillColor="#FFFFFF"
        android:pathData="M54,36 L72,72 L36,72 Z" />
</vector>

ic_icon_3.xml

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="108dp"
    android:height="108dp"
    android:viewportWidth="108"
    android:viewportHeight="108">
    <path
        android:fillColor="#FF9800"
        android:pathData="M4,0 h100 a4,4 0 0 1 4,4 v100 a4,4 0 0 1 -4,4 h-100 a4,4 0 0 1 -4,-4 v-100 a4,4 0 0 1 4,-4 z" />
    <path
        android:fillColor="#FFFFFF"
        android:pathData="M54,36 L72,54 L54,72 L36,54 Z" />
</vector>

第二步 注册表中AndroidManifest.xml:

  <activity
            android:name=".MainActivity"
            android:exported="true"
            android:windowSoftInputMode="adjustResize">
        </activity>

  <activity-alias
            android:name=".IconAlias1"
            android:enabled="true"
            android:exported="true"
            android:icon="@drawable/ic_icon_1"
            android:label="@string/app_name"
            android:targetActivity=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

        <activity-alias
            android:name=".IconAlias2"
            android:enabled="false"
            android:exported="true"
            android:icon="@drawable/ic_icon_2"
            android:label="@string/app_name"
            android:targetActivity=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

        <activity-alias
            android:name=".IconAlias3"
            android:enabled="false"
            android:exported="true"
            android:icon="@drawable/ic_icon_3"
            android:label="@string/app_name"
            android:targetActivity=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

        <activity-alias
            android:name=".IconAlias4"
            android:enabled="false"
            android:exported="true"
            android:icon="@drawable/ic_icon_4"
            android:label="@string/app_name"
            android:targetActivity=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

第三步 写方法:

  public void change1(View view) {
        switchAppIcon(1);
    }

    private void switchAppIcon(int iconIndex) {
        PackageManager pm = getPackageManager();
        for (int i = 1; i <= 8; i++) {
            ComponentName alias = new ComponentName(this, "包名.IconAlias" + i);
            pm.setComponentEnabledSetting(
                    alias,
                    i == iconIndex
                            ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
                            : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);
        }
        Toast.makeText(MainActivity.this,"应用图标已切换为 " + iconIndex,Toast.LENGTH_LONG).show();
    }

ok,大功告成!!!是不是很简单。
运行结果app会退出,所以这里这个第三步的方法之前做一个友好的提醒。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容