Ответ 1
Ваша тема распространяется на Theme.MaterialComponents
? Более подробную информацию о том, как обеспечить правильную работу всех компонентов, можно найти на странице https://material.io/develop/android/docs/getting-started/
У меня есть компонент 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?
Ваша тема распространяется на Theme.MaterialComponents
? Более подробную информацию о том, как обеспечить правильную работу всех компонентов, можно найти на странице https://material.io/develop/android/docs/getting-started/
Если вы используете какой-либо из 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>
если вы хотите продолжать использовать свои старые стили, но хотите расширить только от "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>
Проверьте, наследует ли ваша AppTheme от MaterialComponents, как указано здесь.
<style name="Theme.MyApp" parent="Theme.MaterialComponents.Light">
<!-- ... -->
</style>
Не забудьте проверить все варианты файла styles.xml. Это была на самом деле проблема, которую я имел.
Моя тема выходит из 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>
и измените название вашей темы.
Застрял в этой ошибке, даже если моя тема расширяется Theme.MaterialComponents
. Я создавал фишки вот так: Chip chip = new Chip(getActivity().getBasecontext(), null, R.attr.CustomChipChoice);
.
Решение состоит в том, чтобы изменить его на Chip chip = new Chip(getActivity(), null, R.attr.CustomChipChoice);
.
Надеюсь, это поможет.
У меня была та же проблема, я изменил тему своей деятельности, но это не решило проблему. Я изменил мою основную тему приложения с 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>
Я сталкивался с этой проблемой раньше. Я должен использовать стабильную версию для библиотеки материалов дизайна. Итак, я вернулся к стабильной версии 1.0.0.
замените свою зависимость конструктора материалов следующим:
реализация 'com.google.android.material: material: 1.0.0'