如何为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
相关产品推荐
相关产品推荐

