将自定义chipDrawable背景设置为Chip

时间:2018-11-29 05:49:39

标签: android-chips

我想为Chip设置自定义可绘制背景,就像 chip.setBackgroundDrawable(context.getResources()。getDrawable(R.drawable.bg_cutom_drawable));

但是它不起作用。它给出了错误

java.lang.UnsupportedOperationException: Do not set the background resource; Chip manages its own background drawable.

它需要一个 chipDrawable 。如何为相同的创建chipDrawable。我尝试过但无法找到解决方案。 请建议我,将不胜感激。

5 个答案:

答案 0 :(得分:1)

如果要更改背景颜色,可以尝试:

ChipDrawable chipDrawable = (ChipDrawable)chip.getChipDrawable();
chipDrawable.setChipBackgroundColorResource(R.color.colorPrimary);

答案 1 :(得分:1)

使用此代码,您可以生成多色芯片。


将此代码添加到oncreate()或函数中的任何地方

// "i" is integer value and it will be unique for every chip. In my case I have put in chip in FOR loop that why "i" is there

Chip chip = (Chip) LayoutInflater.from(getActivity()).inflate(R.layout.item_content_lang_chip, null);
                chip.setText(contentLangModels.get(i).getContentDisplay());
                chip.setId(i);
chip.setChipBackgroundColor(buildColorStateList(getActivity(),"#1e61d5","#2e2e37"));


chipGrpContentType.addView(chip);

在活动中添加以下功能

 public ColorStateList buildColorStateList(Context context, String pressedColorAttr, String defaultColorAttr){
        int pressedColor = Color.parseColor(pressedColorAttr);
        int defaultColor = Color.parseColor(defaultColorAttr);

        return new ColorStateList(
                new int[][]{
                        new int[]{android.R.attr.state_checked},
                        new int[]{} // this should be empty to make default color as we want
                }, new int[]{
                pressedColor,
                defaultColor
        }
        );
    }

enter image description here

答案 2 :(得分:0)

请勿使用android:background属性。它将被忽略,因为Chip管理自己的背景Drawable chip document

答案 3 :(得分:0)

<android.support.design.chip.Chip
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:background="@drawable/bg_chip"
                android:paddingLeft="12dp"
                android:paddingRight="12dp"
                android:button="@null"
                android:textSize="@dimen/contents"
                android:textColor="@color/menu_dark"
        />

enter image description here

答案 4 :(得分:0)

如果某人在对话框中使用材料碎片并因上述错误而崩溃,那么您需要从样式中删除对话框集的背景属性。