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

如何让Android快捷方式图标填满整个可用空间

动态快捷方式头像图标去除白边问题

我正尝试在应用中添加向特定用户发送消息的动态快捷方式,希望将快捷方式图标设置为用户的头像,但无论如何操作,图标周围始终存在白边。

val contactCategories = setOf(SHARE_CATEGORY)
val icon = if (friend.photo != null) IconCompat.createWithBitmap(run {
    val imageDecoded = Base64.decode(friend.photo, Base64.DEFAULT)
    val bitmap = BitmapFactory.decodeByteArray(imageDecoded, 0, imageDecoded.size)

    // From diesel - https://stackoverflow.com/a/15537470/7484693
    // Licensed under CC BY-SA 3.0
    val output: Bitmap = if (bitmap.width > bitmap.height) {
        Bitmap.createBitmap(bitmap.height, bitmap.height, Bitmap.Config.ARGB_8888)
    } else {
        Bitmap.createBitmap(bitmap.width, bitmap.width, Bitmap.Config.ARGB_8888)
    }

    Log.d(MainViewModel::class.java.name, "${bitmap.width} x ${bitmap.height}")
    val canvas = Canvas(output)

    val color: UInt = 0xff424242u
    val paint = Paint()
    val rect = Rect(0, 0, bitmap.width, bitmap.height)

    val r = if (bitmap.width > bitmap.height) {
        (bitmap.height / 2).toFloat()
    } else {
        (bitmap.width / 2).toFloat()
    }

    paint.isAntiAlias = true
    canvas.drawARGB(0, 0, 0, 0)
    paint.color = color.toInt()
    canvas.drawCircle(r, r, r, paint)
    paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN)
    canvas.drawBitmap(bitmap, rect, rect, paint)
    output
}) else null

ShortcutManagerCompat.pushDynamicShortcut(
    context,
    ShortcutInfoCompat.Builder(context, friend.id).setShortLabel(friend.name).setPerson(
            Person.Builder().setName(friend.name).setKey(friend.id).setImportant(true)
                .setIcon(icon).build()
        ).setIcon(icon).setIntent(Intent(
            context, MainActivity::class.java
        ).apply {
            action = Intent.ACTION_SENDTO
            putExtra(EXTRA_RECIPIENT, friend.id)
        }).setLongLived(true).setCategories(contactCategories).setPerson(
            Person.Builder().setName(friend.name).build()
        ).build()
)

大部分代码用于生成圆形图标,但即使不裁剪,图标也是按“适配”方式缩放,仍会露出边角。我希望按“填充”方式缩放,让背景完全不可见。图标是128x128的位图,尺寸应该足够,但放大也没有效果。

当前效果截图(注意图标周围的白边):
快捷方式图标带白边截图

期望效果截图:
WhatsApp快捷方式图标填满空间截图

我知道这是可行的,因为Google多款第一方应用(Messages、Meet、Contacts)和第三方应用(WhatsApp、Discord、eBay、Snapchat)都支持此功能。是否有我遗漏的API或特定的图标创建方法?


内容的提问来源于stack exchange,提问作者Aragorn Crozier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:45:33