如何为Android任务视图添加替代图标?API 26场景实现方案
嘿,这个问题我刚好有经验!Android从API 26(也就是Android 8.0 Oreo)开始正式支持为任务视图(Recents屏幕)设置单独的替代图标,Facebook用的就是这个特性。下面给你两种实现方式,按需选择:
实现任务视图替代图标的两种方式
方式一:静态配置(Manifest中固定设置)
这种方式适合不需要动态切换图标的场景,一次配置永久生效:
- 第一步:准备专属的任务视图图标。建议做单色、高对比度的简洁样式(比如Facebook那种反色图标),并适配不同分辨率:
- 48x48dp(mdpi)
- 72x72dp(hdpi)
- 96x96dp(xhdpi)
- 144x144dp(xxhdpi)
- 192x192dp(xxxhdpi)
把这些图标放到对应的mipmap-xxx目录下,比如命名为ic_launcher_recents。
- 第二步:修改
AndroidManifest.xml,找到你的主启动Activity(带有MAIN和LAUNCHERintent-filter的那个),添加<meta-data>标签指定任务图标:
<activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- 核心:指定任务视图使用的替代图标 --> <meta-data android:name="android.app.taskIcon" android:resource="@mipmap/ic_launcher_recents" /> </activity>
方式二:动态设置(代码中灵活切换)
如果需要根据场景(比如主题切换、用户操作)动态更换任务视图图标,就用这种方式:
- 在Activity的生命周期方法(比如
onCreate)中,创建ActivityManager.TaskDescription对象并设置:
Java代码示例
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 仅在API26及以上版本生效 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // 构建任务视图描述对象 ActivityManager.TaskDescription taskDesc = new ActivityManager.TaskDescription( getString(R.string.app_name), // 任务视图显示的应用名(可选,默认用AppManifest里的名称) BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher_recents), // 自定义任务图标 getResources().getColor(R.color.task_background) // 任务视图的背景色(可选) ); // 设置到当前Activity setTaskDescription(taskDesc); } }
Kotlin代码示例
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val taskDesc = ActivityManager.TaskDescription( getString(R.string.app_name), BitmapFactory.decodeResource(resources, R.mipmap.ic_launcher_recents), resources.getColor(R.color.task_background, theme) ) setTaskDescription(taskDesc) } }
额外注意点
- 图标规范:任务视图图标要简洁,因为系统会根据当前主题(深色/浅色)调整显示效果,高对比度的单色图标适配性最好。
- 兼容性:API26以下的系统会直接使用应用的主图标,无需额外处理兼容逻辑。
- Facebook的实现逻辑:他们就是用了静态配置的方式,给主Activity指定了反色的
taskIcon,所以任务视图里的图标和主图标样式、颜色相反。
内容的提问来源于stack exchange,提问作者hysabone.com




