Shortcuts の Icon が vectorDrawable で、色を変えたい時
使っている resources が vectorDrawable であり Shortcuts の Icon としてセットできるけど色を変えたい場合、Shortcuts の Icon では tints が使えない。
方法の一個として drawable の setColorFilter で色を変え、bitmap に変換してセットする
// bitmap に変換して Icon で返してくれ君 @RequiresApi(Build.VERSION_CODES.N_MR1) fun createIcon(activity: Activity, drawableId: Int): Icon { val changeDrawable = ContextCompat.getDrawable(activity, drawableId) changeDrawable?.setColorFilter( ContextCompat.getColor(activity, R.color.change_color), PorterDuff.Mode.SRC_IN ) var bitmap: Bitmap? = null changeDrawable?.let { val newBitmap = Bitmap.createBitmap(it.intrinsicWidth, it.intrinsicHeight, Bitmap.Config.ARGB_8888) val canvas = Canvas(newBitmap) it.setBounds(0, 0, canvas.width, canvas.height) it.draw(canvas) bitmap = newBitmap } return if (bitmap == null) { Icon.createWithResource(activity, drawableId) } else { Icon.createWithBitmap(bitmap) } }
// 使う側 val shortcut = ShortcutInfo.Builder(activity, "shortcut_id") .setShortLabel("label") .setIcon(createIcon(activity, R.drawable.ic_shortcut)) .setIntent(hogeIntent) val shortcutManager = activity.getSystemService<ShortcutManager>(ShortcutManager::class.java) shortcutManager.dynamicShortcuts = Arrays.asList(shortcut.build())
ドキュメント https://developer.android.com/guide/topics/ui/shortcuts/creating-shortcuts#attribute-values