java.lang.IllegalArgumentException: для этого компонента требуется указать действительный атрибут android: textAppearance

У меня есть компонент com.google.android.material.button.MaterialButton в одном из моего файла макета, и я получаю эту ошибку, когда использую последнюю версию библиотеки Material Components (com.google.android.material: material: 1.0 0,0-alpha3):

java.lang.IllegalArgumentException: для этого компонента требуется указать действительный атрибут android: textAppearance.

Он не присутствовал в 1.0.0-alpha1. Является ли это ошибкой в библиотеке или мне нужно просто указать атрибут textAppearance?

Ответы

Ответ 2

Если вы используете какой-либо из MaterialComponent, то ваша тема должна расширяться из этой темы "Theme.MaterialComponents.Light.DarkActionBar"

 <style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

Ответ 3

если вы хотите продолжать использовать свои старые стили, но хотите расширить только от "Theme.MaterialComponents", тогда вы можете использовать "Bridge".

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorAccent</item>
        <item name="colorAccent">@color/colorPrimaryDark</item>
</style>

Ответ 4

Проверьте, наследует ли ваша AppTheme от MaterialComponents, как указано здесь.

<style name="Theme.MyApp" parent="Theme.MaterialComponents.Light">
    <!-- ... -->
</style>

Не забудьте проверить все варианты файла styles.xml. Это была на самом деле проблема, которую я имел.

Ответ 5

Моя тема выходит из Theme.MaterialComponents? О да, действительно, и так было с тех пор, как я начал использовать любой новый материал пользовательского интерфейса. Если все эти ответы здесь так же бесполезны для вас, как и для меня, будьте готовы: ошибка This component requires that you specify a valid android:textAppearance attribute может быть связана с внешней библиотекой, указывающей android:theme с тем же именем, что и используемая вами тема, и Android случайным образом решает, какой из них использовать, в зависимости от вашего build.gradle. В моем случае виновник был внутри мобильного FFmpeg.

Я начал сталкиваться с этой ошибкой после работы в течение недели, в то время как вариант сборки был настроен на другой вкус продукта, а затем переключился обратно на исходный. Что изменилось между тем? После тщательного изучения я обнаружил, что сборка сломалась после того, как я разделил implementation 'com.arthenica:mobile-ffmpeg-min:4.2.2.LTS' на две части, для каждого продукта, где я фактически использую его следующим образом:

videoImplementation 'com.arthenica:mobile-ffmpeg-min:4.2.2.LTS'
mainImplementation 'com.arthenica:mobile-ffmpeg-min:4.2.2.LTS'

Этого было достаточно, чтобы активировать This component requires that you specify a valid android:textAppearance attribute для аромата main, в то же время нормально работая для аромата video. Каждая сборка main терпела крах, потому что тема моего приложения называется AppTheme, а в манифесте Mobile FFmpeg также указывается android:theme="@style/AppTheme" (который влияет на все версии до 4.2.2). Поэтому я переименовал мою тему, но это привело к ошибке сборки, очень похожей на ту, что здесь: https://github.com/tanersener/mobile-ffmpeg/issues/206

    Attribute [email protected] value=(@style/ScryptedTheme) from AndroidManifest.xml:37:9-45
    is also present at [com.arthenica:mobile-ffmpeg-https:4.2.LTS] AndroidManifest.xml:17:9-40 value=(@style/AppTheme).
    Suggestion: add 'tools:replace="android:theme"' to <application> element at AndroidManifest.xml:31:5-95:19 to override.

После добавления сказанного tools:replace="android:theme" все снова заработало, и исходная ошибка MaterialComponents исчезла.

Но почему это хорошо для одного аромата и не хорошо для другого? Абсолютно не знаю. Кредит идет на тенденцию Google добавлять самые сумасшедшие ошибки в "стабильные" выпуски. По крайней мере, это можно решить очень легко с помощью рефакторинга.

TL; DR

Это проблема: https://github.com/tanersener/mobile-ffmpeg/issues/206 Вместе с тем, что когда два объединенных манифеста указывают разные темы с одним и тем же именем, Android выберет одну в случайном порядке в зависимости от содержимого вашего build.gradle.

Решение: Добавьте tools:replace="android:theme" в свой тег <application> и измените название вашей темы.

Ответ 6

Застрял в этой ошибке, даже если моя тема расширяется Theme.MaterialComponents. Я создавал фишки вот так: Chip chip = new Chip(getActivity().getBasecontext(), null, R.attr.CustomChipChoice);.

Решение состоит в том, чтобы изменить его на Chip chip = new Chip(getActivity(), null, R.attr.CustomChipChoice);.

Надеюсь, это поможет.

Ответ 7

У меня была та же проблема, я изменил тему своей деятельности, но это не решило проблему. Я изменил мою основную тему приложения с AppCompact на Theme.MaterialComponents

<application
    android:allowBackup="true"
    android:fullBackupContent="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme2">
<activity
        android:name=".MainActivity"
        android:label="@string/app_name"/>
</application>

Ответ 8

Я сталкивался с этой проблемой раньше. Я должен использовать стабильную версию для библиотеки материалов дизайна. Итак, я вернулся к стабильной версии 1.0.0.

замените свою зависимость конструктора материалов следующим:

реализация 'com.google.android.material: material: 1.0.0'