wake-up-neo.net

android.support.design.button.MaterialButton löst InflateException aus

Ich versuche, dem The MDC Codelab auf codelabs.developers.google.com mit den neuesten Bibliotheksversionen zu folgen .. _. Der EditText -Android.support.design.widget.TextInputEditText scheint bei der Verwendung von Android.support erwartungsgemäß zu funktionieren .design.button.MaterialButton Eine Laufzeit-InflateException wird ausgelöst. 

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'
   })

...

StackTrace

    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: Weitere Details zu stacktrace hinzugefügt und herausgefunden, dass das Problem damit zusammenhängt, dass das App Theme von Theme.MaterialComponents vererbt werden muss.

8
Nabster

Stellen Sie sicher, dass der App-Designstil von Theme.MaterialComponents übernommen wird.

Beispiel:

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

Wenn Sie das Thema (noch) nicht für die gesamte App ändern können, können Sie dies auch nur für die this -Ansicht tun:

<com.google.Android.material.button.MaterialButton
    Android:id="@+id/fooButon"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_margin="16dp"
    Android:fontFamily="sans-serif"
    Android:padding="8dp"
==> Android:theme="@style/Theme.MaterialComponents.Light"
    app:backgroundTint="@color/base_white" />
15
Ciprian

Neben dem Hinzufügen von Theme.MaterialComponents 

1) Sie können auch Theme.MaterialComponents.Bridge hinzufügen, wenn Sie nur Attribute und kein Standard-Styling erhalten möchten

2) Fügen Sie androidx- und com.google.Android.material-Bibliotheken hinzu, anstatt die Designs zu ändern.

Weitere Informationen finden Sie (5) Die Komponenten des Materialdesigns (Android Dev Summit '18) - YouTube um 3:25 Min

1
Apoorva Jain

Der Fehler kann auch auftreten, wenn Material Components-Versionen ab 1.0.0 verwendet werden, und zwar aufgrund eines Themennamenskonflikts aufgrund von Themen, die in externen Bibliotheken angegeben sind, z. B. Mobile FFmpeg . In diesem Fall müssen Sie den Namen Ihres eigenen Themas ändern. Für weitere Informationen erkläre ich dies ausführlicher in einer Antwort auf diese ähnliche Frage: https://stackoverflow.com/a/57565773/2964379

Wenn Sie auf dieses Problem stoßen, aber wissen, dass Sie ein MaterialComponents-Thema korrekt verwenden, suchen Sie in Android Studio nach Ihrem App-Thema mit "In Pfad suchen" -> "Bereich" -> "Alle Orte". Wenn Ihr Themenname beispielsweise nach dem Erstellen und Ausführen Ihrer App AppTheme lautet, suchen Sie nach "AppTheme" einschließlich der Anführungszeichen, um festzustellen, ob es eine zwischengespeicherte XML-Datei gibt, die denselben Namen angibt.

0
0101100101