Как применить «стиль» для чипа в коде? - PullRequest
0 голосов
/ 24 марта 2019

В моем макете xml у меня есть группа чипов с фильтром чипов.

<android.support.design.chip.ChipGroup
    android:id="@+id/chipGroup"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.design.chip.Chip
        style="@style/myStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    .....

</android.support.design.chip.ChipGroup>

Поскольку существует много фильтров, кажется разумным добавить их в код.Проблема в том, что мне нужно применить атрибут style к каждому чипу.

Я пытался:

val chip = Chip(ContextThemeWrapper(context, R.style.myStyle))
binding.chipGroup.addView(chip)

без эффекта

val chip = Chip(context, null, R.style.myStyle)
binding.chipGroup.addView(chip)

без эффекта

Я создал layout/filter_chip.xml и поместил туда шаблон чипа

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.chip.Chip 
    xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/myStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

, и я создал его в коде, подобном этому

val chip = inflater.inflate(R.layout.filter_chip, binding.chipGroup, false) as Chip   
binding.chipGroup.addView(chip)

Он работает и стиль применяется.Но я спрашиваю себя, действительно ли это самый простой способ добиться этого.Ты знаешь лучший?

1 Ответ

0 голосов
/ 27 марта 2019

Я думаю, что вы можете использовать ContextThemeWrapper , создав ContextThemeWrapper со стилем, который вам нужен, и передав тематический контекст конструктору чипа.

...