Невозможно добавить список состояний цвета текста в чип материала - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь добавить состояние цвета текста в Material Chip. Это даже не кликабельно.

макет. xml

<HorizontalScrollView
    android:id="@+id/horizontalScrollView"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <com.google.android.material.chip.ChipGroup
        android:id="@+id/cgServiceList"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:singleLine="true"
        app:singleSelection="true" />
</HorizontalScrollView>

фрагмент.kt

val chipGroup = view.cgServiceList

for (x in 0..12) {
    val chip = Chip(context, null, R.style.Widget_MaterialComponents_Chip_Choice)

    chip.text = "Nail Care"
    chip.setTextColor(resources.getColorStateList(R.color.txt_chip_state_list, null))
    chip.isClickable = true

    chipGroup.addView(chip)
}

R.color .txt_chip_state_list

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/black" />
    <item android:color="@color/colorPrimary" android:state_checked="true"  />
</selector>

Ответы [ 2 ]

0 голосов
/ 14 января 2020

Проблема здесь:

val chip = Chip(context, null, R.style.Widget_MaterialComponents_Chip_Choice)

Таким образом, вы не используете стиль Widget.MaterialComponents.Chip.Choice, так как вы не может использовать конструктор val chip = Chip(context, null, R.style.xxxx) для назначения стиля, поскольку 3-й параметр не стиль, а атрибут в теме как R.attr.chipStyle.
Для более детали для изменения стиля чипа программно проверьте также этот ответ .

В своем коде вы используете стиль по умолчанию для Chip Widget.MaterialComponents.Chip.Action, который обеспечивает:

<item name="android:checkable">false</item>

Это объясняет, почему ваш Chip не подлежит проверке.
Метод chip.setTextColor является правильным и работает с селектором (но используйте селектор, как описано Ben.P в другом ответе ).

Как вы указали, если вы используете его в макете. xml он работает, поскольку в этом случае стиль, объявленный в макете, является правильным (Widget.MaterialComponents.Chip.Choice).

0 голосов
/ 14 января 2020

Переключите порядок элементов <item> в вашем списке состояний:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/colorPrimary" android:state_checked="true"  />
    <item android:color="@color/black" />
</selector>

Список анализируется сверху вниз, и выбирается первое совпадение. В вашей версии, независимо от фактического состояния, первое будет совпадать (поскольку оно вообще не определяет состояния).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...