java.lang.IllegalArgumentException: This component requires that you specify a valid android:textAppearance attribute

AndroidMaterial ComponentsMaterial Components-Android

Android Problem Overview


I have a com.google.android.material.button.MaterialButton component in one of my layout file and I get this error when I am using the latest version of the Material Components library (com.google.android.material:material:1.0.0-alpha3):

java.lang.IllegalArgumentException: This component requires that you specify a valid android:textAppearance attribute.

It wasn't present in 1.0.0-alpha1. Is this a bug in the library or should I just specify a textAppearance attribute from now?

Android Solutions


Solution 1 - Android

Does your theme extend from Theme.MaterialComponents? More info about how to ensure all the components will work correctly can be found at https://material.io/develop/android/docs/getting-started/

Solution 2 - Android

If you are using any of the MaterialComponent, then your theme must extend from the following theme - 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>

Solution 3 - Android

If you want to keep using your old styles but only want to extend from 'Theme.MaterialComponents' then you can use '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>

Solution 4 - Android

if your theme does not extend MaterialComponents theme, and you want to keep the AppCompat theme, use a bridge theme, that would allow you to use material components keeping the AppCompat theme.

change your existing theme from:

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

to this:

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

Solution 5 - Android

Does my theme extend from Theme.MaterialComponents? Oh yes indeed, and has been since I started using any of the new Material UI stuff. If all these answers here are as unhelpful to you as they were to me, get ready: The This component requires that you specify a valid android:textAppearance attribute error can be related to an external library specifying android:theme with the same name as the theme you are using, and Android randomly deciding which one to use depending on your build.gradle. In my case the culprit was inside Mobile FFmpeg.

I started encountering this error after working for a week while the build variant was set to a different product flavor and then switching back the original one. What changed meanwhile? After thorough investigation I found the build broke after I split implementation 'com.arthenica:mobile-ffmpeg-min:4.2.2.LTS' in two, for each product flavor where I actually use it like this:

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

This was enough to trigger This component requires that you specify a valid android:textAppearance attribute for flavor main, while working fine for flavor video. Every main build crashed because my app's theme is named AppTheme and the Mobile FFmpeg manifest also specifies android:theme="@style/AppTheme" (which affects all versions up to 4.2.2). So I renamed my theme, but that resulted in a build error very similar to the one here: 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.

After adding said tools:replace="android:theme", everything worked again, and the original MaterialComponents error was gone.

But why is it OK for one flavor and not OK for the other? Absolutely no idea. Credit goes to Google's tendency to add the craziest bugs to "stable" releases. At least it's possible to solve very easily with some refactoring.

TL;DR

THIS is the issue: https://github.com/tanersener/mobile-ffmpeg/issues/206 Together with the fact that when two merged manifest specify different themes with the same name, Android will choose one randomly depending on the content of your build.gradle.

Solution: Add a tools:replace="android:theme" to your manifest's <application> tag and change the name of your theme.

Solution 6 - Android

Check if your AppTheme inherits from MaterialComponents as specified here.

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

Remember to check all variants of styles.xml file. This was actually the issue I had.

Solution 7 - Android

I had the same problem, I changed my activity theme but it didnt resolved the issue. The i changed my main app theme from AppCompact to 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>

Solution 8 - Android

Got stucked in this error even if my theme extends Theme.MaterialComponents. I was creating Chips like this :Chip chip = new Chip(getActivity().getBasecontext(), null, R.attr.CustomChipChoice);.

The solution is to change it to Chip chip = new Chip(getActivity(), null, R.attr.CustomChipChoice);.

Hope it helps.

Solution 9 - Android

I have included this dependence first

implementation 'com.google.android.material:material:1.2.0-alpha01'

Than I have set my project style as bellow

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

Solution 10 - Android

Extending Correctly? => Verify your styles!

In my case, I made a dumb auto-complete mistake:

<item name="textInputStyle">@style/Widget.MaterialComponents.Button.OutlinedButton</item>

What I really meant was TextInputLayout.OutlinedBox instead of Button.OutlinedButton:

<item name="textInputStyle">@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox</item>

Unfortunately this typo gives the same misleading error (despite extending the theme correctly):

> Caused by: java.lang.IllegalArgumentException: This component requires > that you specify a valid TextAppearance attribute. Update your app > theme to inherit from Theme.MaterialComponents (or a descendant).

...sharing because it took me a long time to spot the error!

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRoland Sz&#233;pView Question on Stackoverflow
Solution 1 - AndroidCameron KetchamView Answer on Stackoverflow
Solution 2 - AndroidsodiqOladeniView Answer on Stackoverflow
Solution 3 - Android9paradoxView Answer on Stackoverflow
Solution 4 - AndroidUsama Saeed USView Answer on Stackoverflow
Solution 5 - Android0101100101View Answer on Stackoverflow
Solution 6 - Androiduser8230917View Answer on Stackoverflow
Solution 7 - AndroidKhanStan99View Answer on Stackoverflow
Solution 8 - AndroidMxwanView Answer on Stackoverflow
Solution 9 - AndroidilidiocnView Answer on Stackoverflow
Solution 10 - Androidcharles-allenView Answer on Stackoverflow