70 votes

java.lang.IllegalArgumentException: ce composant nécessite que vous spécifiiez un attribut android: textAppearance valide

J'ai un com.google.android.matériau de.bouton.MaterialButton composant dans un de mes fichier de mise en page et j'ai cette erreur quand je suis en utilisant la dernière version de la documentation de bibliothèque de Composants (com.google.android.matériel:matériau:1.0.0-alpha3):

java.lang.IllegalArgumentException: Ce composant exige que vous spécifiez valide android:textAppearance attribut.

Il n'était pas présent dans la version 1.0.0-alpha1. Est-ce un bug dans la bibliothèque ou devrais-je simplement indiquer un textAppearance attribut à partir de maintenant?

81voto

Cameron Ketcham Points 1874

Votre thème s'étend-il de Theme.MaterialComponents ? Plus d'informations sur la façon de s'assurer que tous les composants fonctionneront correctement peuvent être trouvées à https://material.io/develop/android/docs/getting-started/

60voto

sodiqOladeni Points 408

Si vous utilisez l'un des MaterialComponent, votre thème doit s'étendre à partir du thème suivant - 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>
 

48voto

Akshay Gaonkar Points 371

si vous souhaitez continuer à utiliser vos anciens styles mais que vous souhaitez uniquement étendre à partir de "Theme.MaterialComponents", vous pouvez utiliser "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>
 

8voto

0101100101 Points 1292

Mon thème s'étendre à partir de Theme.MaterialComponents? Ah oui en effet, et ce depuis que j'ai commencé à utiliser le nouveau Matériel des éléments d'INTERFACE utilisateur. Si toutes les réponses ici sont inutiles pour vous, car ils étaient à moi, préparez-vous: L' This component requires that you specify a valid android:textAppearance attribute d'erreur peut être liée à une bibliothèque externe précisant android:theme avec le même nom que le thème que vous utilisez, et Android au hasard de décider lequel utiliser en fonction de votre build.gradle. Dans mon cas, le coupable était à l'intérieur de Mobile FFmpeg.

J'ai commencé à rencontrer cette erreur après avoir travaillé pendant une semaine, alors que la construction de la variante a été défini à un autre produit de la saveur et puis en revenant de l'original. Ce qui a changé entre-temps? Après enquête approfondie, j'ai trouvé le build cassé après j'ai divisé implementation 'com.arthenica:mobile-ffmpeg-min:4.2.2.LTS' en deux, pour chaque produit de la saveur où j'ai réellement l'utiliser comme ceci:

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

Ce fut suffisant pour déclencher This component requires that you specify a valid android:textAppearance attribute pour la saveur main, tout fonctionne bien pour la saveur video. Chaque main construire écrasé parce que mon application, le thème est nommé AppTheme et le Mobile FFmpeg manifeste également spécifie android:theme="@style/AppTheme" (ce qui affecte toutes les versions jusqu'à 4.2.2). J'ai donc renommé mon thème, mais qui a entraîné une erreur de construction très similaire à celui ici: https://github.com/tanersener/mobile-ffmpeg/issues/206

    Attribute application@theme 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.

Après l'ajout dit - tools:replace="android:theme", tout fonctionnait à nouveau, et l'original MaterialComponents erreur a disparu.

Mais pourquoi est-il OK pour une saveur et pas OK pour les autres? Absolument aucune idée. Le crédit va à Google tendance à ajouter de la plus folle des bugs à "stable" communiqués. Au moins, il est possible de résoudre très facilement avec quelques refactoring.

TL;DR

C'est la question: https://github.com/tanersener/mobile-ffmpeg/issues/206 En collaboration avec le fait que, lorsque les deux ont fusionné manifeste de spécifier des thèmes différents avec le même nom, Android va choisir un au hasard en fonction du contenu de votre build.gradle.

Solution: Ajouter un tools:replace="android:theme" de votre manifeste <application> balise et de changer le nom de votre thème.

4voto

an1s1a Points 21

Vérifiez si votre AppTheme hérite de MaterialComponents comme spécifié ici .

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

N'oubliez pas de vérifier toutes les variantes du fichier styles.xml. C'était en fait le problème que j'avais.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X