Установить пользовательский фон chipDrawable для Chip

Я хочу установить пользовательский фон для рисования в 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.

Требуется чип Drawable. Как создать chipDrawable для этого же. Я пытался, но не смог найти решение. Пожалуйста, предложите мне это было бы полезно.

1 ответ

Если вы хотите изменить цвет фона, вы можете попробовать:

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

Используя этот код, вы можете создать многоцветный чип.


добавьте этот код в 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
        }
        );
    }

<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"
        />

Не используйте android:background приписывать. Это будет игнорироваться, потому что Chip управляет своим собственным документом Drawable chip document

Если кто-то использует чип материала внутри диалога и вылетает с такой же ошибкой, указанной выше, вам необходимо удалить атрибут фона для вашего набора диалоговых окон из стилей.

Другие вопросы по тегам