Установить цвет рамки для чипа в Android

В моем приложении для Android у меня есть простой чип, который выглядит так.

введите описание изображения здесь

Есть ли способ установить цвет границы, чтобы он был таким?

введите описание изображения здесь

ОБНОВЛЕНИЕ: я пытался добавить фигуру, но возникло исключение при раздувании макета.

 <android.support.design.chip.Chip
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:background="@drawable/chip_with_border"
     android:text="my chip" />

drawable/chip_with_border.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#FFFFFF"/>
            <corners android:radius="30dp"/>
            <stroke android:width="1dp" android:color="#DDDDDD"/>
        </shape>
    </item>
</selector>

Это вызывает исключение

android.view.InflateException: строка двоичного XML-файла № 32: ошибка при раздувании класса android.support.design.chip.Chip


person Vitalii    schedule 22.03.2019    source источник


Ответы (3)


Я нашел ответ сам. Мне нужно добавить атрибуты chipStrokeColor и chipStrokeWidth к моему chip

  <android.support.design.chip.Chip
      android:id="@+id/chip"
      style="@style/Widget.MaterialComponents.Chip.Filter"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      app:chipStrokeColor="#F0F"
      app:chipStrokeWidth="1dp"
      android:text="my chip"
      app:checkedIcon="@drawable/ic_done_green"
      app:chipBackgroundColor="#FFF" />

введите описание изображения здесь

person Vitalii    schedule 22.03.2019

С помощью библиотеки компонентов материалов и Chip вы можете использовать собственный стиль :

<com.google.android.material.chip.Chip
    style="@style/Colors_Widget.MaterialComponents.Chip.Choice"
    ..>

или атрибуты app:chipStrokeColor, app:chipStrokeWidth, app:chipBackgroundColor, android:textColor в макете xml:

<com.google.android.material.chip.Chip
    app:chipBackgroundColor="@color/chip_background_color_selector"
    app:chipStrokeColor="@color/color_choice_chip_strokecolor_selector"
    app:chipStrokeWidth="1dp"
    android:textColor="@color/color_choice_chip_text_color"
    ..>

С этим стилем:

  <style name="Colors_Widget.MaterialComponents.Chip.Choice" parent="Widget.MaterialComponents.Chip.Choice">
    <item name="chipBackgroundColor">@color/chip_background_color_selector</item>
    <item name="chipStrokeColor">@color/color_choice_chip_strokecolor_selector</item>
    <item name="chipStrokeWidth">1dp</item>
    <item name="android:textColor">@color/color_choice_chip_text_color</item>
    <item name="checkedIconVisible">true</item>
  </style>

Для цвета границы вы можете использовать селектор для управления различными состояниями.
Что-то вроде:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

  <item android:color="@color/primaryLightColor" android:state_enabled="true" android:state_selected="true"/>
  <item android:color="@color/primaryLightColor" android:state_enabled="true" android:state_checked="true"/>
  <!-- 87% opacity. -->
  <item android:alpha="0.87" android:color="#C6CCCD" android:state_enabled="true"/>
  <!-- 38% of 87% opacity. -->
  <item android:alpha="0.33" android:color="#C6CCCD"/>

</selector>

введите описание изображения здесь

person Gabriele Mariotti    schedule 24.09.2019

1- Создайте shape.xml в папке с возможностью рисования и поместите в нее этот код.

<?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#FFFFFF"/>
            <corners android:radius="30dp"/>
            <stroke android:width="1dp" android:color="#DDDDDD"/>
        </shape>
    </item>
</selector>

2- затем установите атрибут android:background="@drawable/shape" в свой View

person Ahmed M. Abdalla    schedule 22.03.2019
comment
Я пытался сделать так, но у меня сбой с исключением Error inflating class android.support.design.chip.Chip - person Vitalii; 22.03.2019
comment
он спрашивает о границе чипа, а не о фоне - person Muhamed El-Banna; 13.02.2020