Этот компонент требует, чтобы вы указали действительный атрибут TextAppearance - PullRequest
1 голос
/ 01 ноября 2019

Тема моего приложения простирается от AppCompat, но я хочу использовать Chip динамически, но при добавлении Chips динамически происходит сбой приложения с исключением

This component requires that you specify a valid TextAppearance attribute. Update your app theme to inherit from Theme.MaterialComponents (or a descendant).

, но при расширении темы приложения до Material приложение не падает и не фильтруетсяЧипы работают нормально, но моя проблема в том, что я не хочу расширять тему из Material, потому что это влияет на пользовательский интерфейс моего приложения, как я могу использовать чип в этом сценарии?

Редактировать: использованный мост, он спасает от сбоев, но когда я нажимаючип это не меняет внешний вид чипа, который я нажал

Chip chip = new Chip(getContext());
        ChipDrawable chipDrawable = ChipDrawable.createFromAttributes(getContext(), null, 0, R.style.Widget_MaterialComponents_Chip_Filter);
        chip.setChipDrawable(chipDrawable);
        chip.setCheckable(true);
        chip.setText(itemArrayList.get(i).getName());
        binding.rvReport.addView(chip);

спасибо

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Вы можете проверить официальную документацию :

Тема вашего приложения должна наследоваться от темы Компоненты материалов .
Если вы не может изменить вашу тему, вы можете сделать одно из следующих действий:

  • Наследовать от одного из наших Материальных компонентов Темы моста
  • Продолжайте наследовать от темы AppCompat и добавьте несколько новых атрибутов темы в свою тему.

Для чипа вы можететакже определите макет следующим образом:

<com.google.android.material.chip.Chip
    xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/Widget.MaterialComponents.Chip.Filter"
    .../>

и затем используйте этот код:

Chip chip =
      (Chip) getLayoutInflater().inflate(R.layout.single_chip_layout, chipGroup, false);
//...
chipGroup.addView(chip);
0 голосов
/ 01 ноября 2019

Вы можете указать тему только для этого конкретного чипа, который наследуется от Theme.MaterialComponents, при этом не нужно изменять тему AppCompat для всего приложения:

<com.google.android.material.chip.Chip
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:theme="@style/Theme.MaterialComponents"/>
...