【问题标题】:Can I create a gradient background color on a material Chip?我可以在材质芯片上创建渐变背景颜色吗?
【发布时间】:2019-08-14 03:55:29
【问题描述】:
我相信答案是肯定的,因为我可以看到 react here 的答案,但我不知道如何在 Kotlin/Java 中做到这一点。
我看到的唯一选项是setChipBackgroundColorResource 或setBackgroundColor,它们都需要颜色资源。如何使用渐变作为背景?
- 我知道如何为任何常规视图设置背景,但只是芯片有问题。我试过这个
chip.setBackgroundResource(R.drawable.gradient_background),但它只会让背景变灰
【问题讨论】:
标签:
android
kotlin
material-components
material-components-android
android-chips
【解决方案1】:
目前你做不到。
-
setChipBackgroundColorResource 方法正在使用 color 而不是 drawable
-
setChipBackgroundColor 方法正在使用 ColorStateList
-
methods
setBackgroundResource,setBackgroundDrawable,setBackground只是产生一个警告:Do not set the background; Chip manages its own background drawable.
这是因为 Chip 小部件是 ChipDrawable 周围的薄视图包装器。 ChipDrawable 只是一个MaterialShapeDrawable whick,它通过以下方式管理其背景:
* chipStartPadding iconEndPadding closeIconStartPadding chipEndPadding
* + + + +
* | | | |
* | iconStartPadding | textStartPadding textEndPadding | closeIconEndPadding |
* | + | + + | + |
* | | | | | | | |
* v v v v v v v v
* +-----+----+------------+----+----+--------------- ------+----+----+----------+----+-----+
* | | | XX | | | XX X X X XXX | | | X X | | |
* | | | XX | | | X X X X X X | | | XX XX | | |
* | | | XX XX | | | X XXXX X XXX | | | XX | | |
* | | | XXX | | | X X X X X X | | | XX XX | | |
* | | | X | | | XX X X X X | | | X X | | |
* +-----+----+------------+----+----+--------------- ------+----+----+----------+----+-----+
* ^ ^ ^
* | | |
* + + +
* chipIconSize *动态* closeIconSize
*
【解决方案2】:
无法为 Chip 设置背景,您可以为其设置圆角或颜色。你也可以给边框颜色。
根据documentation,
支持 Chip 的所有属性。不要使用
安卓:背景属性。它将被忽略,因为芯片管理
它自己的背景Drawable。也不要使用 android:drawableStart
和 android:drawableEnd 属性。
因此,如果您正在寻找具有不同边框颜色的边角或芯片,我建议您尝试一下,
Chip chip = new Chip(Activity.this);
chip.setText("Holiday");
chip.setCloseIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.close_chip, null));
chip.setCloseIconTint(ColorStateList.valueOf(Color.parseColor("#aa99bc")));
chip.setPadding(5, 5, 5, 5);
chip.setCloseIconVisible(true);
chip.setTextAppearanceResource(R.style.ChipTextStyle);
chip.setChipStrokeColorResource(R.color.chip_border_color);
chip.setChipStrokeWidth(1);
chip.setChipCornerRadius(30);
chip.setChipBackgroundColorResource(R.color.chip_background);