You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为ShortcutInfoCompat设置方形快捷方式图标?

如何创建方形Android快捷方式图标

你遇到的问题根源在于使用了IconCompat.createWithAdaptiveBitmap()方法——这个方法创建的是自适应图标,Android系统(尤其是O及以上版本)会按照自适应图标规范,自动将其裁剪为圆角矩形(不同Launcher的圆角半径可能不同),所以无论传入什么图片都会显示圆角。

要实现方形快捷方式,可按以下方式调整:

方案1:使用非自适应图标创建方法

替换createWithAdaptiveBitmap为createWithBitmap,直接基于位图创建非自适应图标:

IconCompat icon = IconCompat.createWithBitmap(iconBitmap);

return new ShortcutInfoCompat.Builder(context, Integer.toString(loyaltyCard.id))
        .setShortLabel(loyaltyCard.store)
        .setLongLabel(loyaltyCard.store)
        .setIntent(intent)
        .setIcon(icon);

这种方式在Android 7.1及以下版本会直接显示方形;在Android O及以上版本,部分第三方Launcher可能保留方形,但系统默认Launcher(如Pixel Launcher)仍可能强制添加圆角。

方案2:针对Android 13+禁用自适应特性

Android 13(API 33)及以上新增了Icon.Builder.setIsAdaptive(false)方法,可明确禁用图标自适应,避免系统自动裁剪圆角:

IconCompat iconCompat;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    Icon rawIcon = Icon.createWithBitmap(iconBitmap);
    // 禁用自适应特性
    rawIcon = new Icon.Builder(rawIcon).setIsAdaptive(false).build();
    iconCompat = IconCompat.createFromIcon(context, rawIcon);
} else {
    iconCompat = IconCompat.createWithBitmap(iconBitmap);
}

return new ShortcutInfoCompat.Builder(context, Integer.toString(loyaltyCard.id))
        .setShortLabel(loyaltyCard.store)
        .setLongLabel(loyaltyCard.store)
        .setIntent(intent)
        .setIcon(iconCompat);

注意事项

部分系统默认Launcher(如Pixel、三星One UI的Launcher)会强制对所有快捷方式图标应用圆角样式,这种情况下开发者无法通过代码完全规避,只能依赖用户在系统设置中修改「图标形状」选项。

内容的提问来源于stack exchange,提问作者Simon Rusinov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:25:23