web-dev-qa-db-fra.com

android.support.design.button.MaterialButton lève InflateException

J'essaie de suivre le Le MDC Codelab sur codelabs.developers.google.com avec les dernières versions de la bibliothèque . Le EditText -Android.support.design.widget.TextInputEditText semble fonctionner comme prévu, mais sous Android.support .design.button.MaterialButton une exception d'exécution InflateException est levée. 

Gradle config:

compileSdkVersion 28

minSdkVersion 21

targetSdkVersion 28

dependencies {
   def lifecycle_version = "1.1.1"
   def nav_version = "1.0.0-alpha05"
   def work_version = "1.0.0-alpha06"
   def supportLibraryVersion = "28.0.0-rc01"

   implementation fileTree(include: ['*.jar'], dir: 'libs')
   api "Android.Arch.lifecycle:extensions:$lifecycle_version"
   api "Android.Arch.lifecycle:common-Java8:$lifecycle_version"
   api "Android.Arch.navigation:navigation-fragment:$nav_version"
   api "Android.Arch.navigation:navigation-ui:$nav_version"
   api "Android.Arch.work:work-runtime:$work_version"

   api ("com.Android.support:appcompat-v7:$supportLibraryVersion", {
       exclude group: 'com.Android.support', module: 'support-media-compat'
   })
   api ("com.Android.support:design:$supportLibraryVersion", {
       exclude group: 'com.Android.support', module: 'support-media-compat'
   })
   api ("com.Android.support:cardview-v7:$supportLibraryVersion", {
       exclude group: 'com.Android.support', module: 'support-media-compat'
   })
   api ("com.Android.support:customtabs:$supportLibraryVersion", {
       exclude group: 'com.Android.support', module: 'support-media-compat'
   })

...

Trace de la pile

    E/XXXXXXApp: Unhandled Exception - Application Crash
    Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.XXXXXX/com.XXXXXX.activities.XXXXXXActivity}: Android.view.InflateException: Binary XML file line #84: Binary XML file line #84: Error inflating class Android.support.design.button.MaterialButton
    at com.XXXXXXActivity.onCreate(LoginActivity.Java:107)
...

 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).
                 at Android.support.design.internal.ThemeEnforcement.checkTextAppearance(ThemeEnforcement.Java:170)
                 at Android.support.design.internal.ThemeEnforcement.obtainStyledAttributes(ThemeEnforcement.Java:75)
                 at Android.support.design.button.MaterialButton.<init>(MaterialButton.Java:140)
                 at Android.support.design.button.MaterialButton.<init>(MaterialButton.Java:133)

EDIT: Ajout de plus de détails à stacktrace et a compris que le problème tenait au fait que le thème de l'application devait être hérité de Theme.MaterialComponents.

8
Nabster

Assurez-vous que le style de thème d'application est hérité de Theme.MaterialComponents.

Exemple:

<style name="XXXXXXAppTheme" parent="@style/Theme.MaterialComponents.Light.DarkActionBar">
26
Nabster

Outre l'ajout de Theme.MaterialComponents 

1) vous pouvez également ajouter Theme.MaterialComponents.Bridge si vous souhaitez uniquement obtenir des attributs et non un style par défaut

2) Ajoutez les bibliothèques androidx et com.google.Android.material au lieu de modifier les thèmes.

Plus d'informations peuvent être trouvées (5) Les composants de la conception matérielle (Android Dev Summit '18) - YouTube à 3:25 min

1
Apoorva Jain