1.图标设置
app图标一般都是设置在Android manifest.xml文件里application的icon属性里,如下:
Android manifest.xml:
android:icon="mipmap/ic_launcher" ……> 淘宝、微博都有默认图标,但是到了重大节日或者有重要活动的时候,它们的图标会相应的发生改变,这是怎么做到的呢? 2.动态改变图标 实现的关键是使用activity-alias,配置多个相同activity。 实现流程为:在Manifest文件中使用activity-alias标签准备多个Activity入口,每个activity都指向入口Activity,并且为每个拥有activity-alias标签的activity设置单独的icon和应用名,最后调用SystemService 服务kill掉launcher,并执行launcher的重启操作。 ①首先,修改AndroidManifest.xml文件: package="com.demo.test"> android:allowBackup="true" android:icon="@mipmap/default_logo" android:label="@string/app_name" android:roundIcon="@mipmap/default_logo" ……> ... android:name="com.demo.test.default" android:targetActivity=".MainActivity" android:label="@string/app_name" android:enabled="false" android:icon="@mipmap/default_logo" android:exported="true"> android:name="com.demo.test.special" android:targetActivity=".MainActivity" android:label="@string/special" android:enabled="false" android:icon="@mipmap/special_logo" android:exported="true"> ... 其中涉及到的属性: android:name:注册的组件名字,启动组件的名称。 android:enabled:是否启用这个组件,即是否显示这个入口。 android:icon:图标 android:label:名称 android:targetActivity:默认的activity没有这个属性,指定目标activity,与默认的activity中的name属性是一样的,需要有相应的java类文件。 注: (1)activity-alias需要在activity下面,enabled为false,否则桌面会有两个图标 (2)activity-alias下的name随意,但targetActivity需要是上面activity的name (3)在这配置要换的icon和label (4)android:exported都需要为true。默认为true ②在MainActivity触发Logo图标更换逻辑: private void changeIcon(String name){ PackageManager pm = getPackageManager(); pm.setComponentEnabledSetting( getComponentName(),PackageManager.COMPO NENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); pm.setComponentEnabledSetting(new ComponentName(this, name), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); restart(pm); } 注意changeIcon()方法中的name字符串需要和AndroidManifest.xml文件中的