在 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会退出,所以这里这个第三步的方法之前做一个友好的提醒。