webentwicklung-frage-antwort-db.com.de

InflateException mit FloatingActionButton aus der Official Design Library

Ich erhalte einen Fehler mit dem offiziellen FloatingActionButton aus der Google-Support-Designbibliothek.

Hier ist mein LogCat.

Android.view.InflateException: Binary XML file line #34: Error inflating class Android.support.design.widget.FloatingActionButton
at Android.view.LayoutInflater.createView(LayoutInflater.Java:633)
at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:743)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:806)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:809)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:504)
at de.robv.Android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
at de.robv.Android.xposed.XposedBridge.handleHookedMethod(XposedBridge.Java:655)
at Android.view.LayoutInflater.inflate(Unknown Source)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:414)
at ---.---.com.---.SubCategoryFragment.onCreateView(SubCategoryFragment.Java:47)
at Android.support.v4.app.Fragment.performCreateView(Fragment.Java:1789)
at Android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.Java:955)
at Android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.Java:1138)
at Android.support.v4.app.BackStackRecord.run(BackStackRecord.Java:740)
at Android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.Java:1501)
at Android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.Java:458)
at Android.os.Handler.handleCallback(Handler.Java:739)
at Android.os.Handler.dispatchMessage(Handler.Java:95)
at Android.os.Looper.loop(Looper.Java:135)
at Android.app.ActivityThread.main(ActivityThread.Java:5221)
at Java.lang.reflect.Method.invoke(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:372)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:899)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:694)
at de.robv.Android.xposed.XposedBridge.main(XposedBridge.Java:117)
Caused by: Java.lang.reflect.InvocationTargetException
at Java.lang.reflect.Constructor.newInstance(Native Method)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:288)
at Android.view.LayoutInflater.createView(LayoutInflater.Java:607)
... 24 more
Caused by: Java.lang.NullPointerException: Attempt to invoke virtual method 'Android.graphics.drawable.Drawable Android.graphics.drawable.Drawable$ConstantState.newDrawable()' on a null object reference
at Android.graphics.drawable.LayerDrawable$ChildDrawable.<init>(LayerDrawable.Java:968)
at Android.graphics.drawable.LayerDrawable$LayerState.<init>(LayerDrawable.Java:1014)
at Android.graphics.drawable.RippleDrawable$RippleState.<init>(RippleDrawable.Java:910)
at Android.graphics.drawable.RippleDrawable.createConstantState(RippleDrawable.Java:901)
at Android.graphics.drawable.RippleDrawable.createConstantState(RippleDrawable.Java:90)
at Android.graphics.drawable.LayerDrawable.mutate(LayerDrawable.Java:932)
at Android.graphics.drawable.RippleDrawable.mutate(RippleDrawable.Java:891)
at Android.view.View.applyBackgroundTint(View.Java:16324)
at Android.view.View.setBackgroundDrawable(View.Java:16193)
at Android.support.design.widget.FloatingActionButton.access$201(FloatingActionButton.Java:56)
at Android.support.design.widget.FloatingActionButton$1.setBackgroundDrawable(FloatingActionButton.Java:118)
at Android.support.design.widget.FloatingActionButtonLollipop.setBackgroundDrawable(FloatingActionButtonLollipop.Java:75)
at Android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.Java:131)
at Android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.Java:79)
... 27 more

Die einzige Zeile, die auf meine App verweist, ist die Position, an der die xml -Datei und die Zeile in der Datei, die meine FloatingActionButton ist, aufgeblasen werden.

   <Android.support.design.widget.FloatingActionButton
        Android:id="@+id/myFABSubCat"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true"
        Android:layout_alignParentEnd="true"
        Android:layout_alignParentRight="true"
        Android:layout_margin="16dp"
        Android:backgroundTint="@color/accent"
        Android:src="@drawable/add_icon"
        app:borderWidth="0dp"
        app:elevation="4sp" />

Zusatzinformation:

Hier ist mein App-Thema:

<resources>

    <!-- Base application theme. -->
    <style name="MBTIAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/primary</item>
        <item name="colorPrimaryDark">@color/primaryDark</item>
        <item name="colorAccent">@color/accent</item>
        <item name="Android:windowContentOverlay">@null</item>
    </style>

    <style name="ThemeNoActionBar" parent="MBTIAppTheme">
        <item name="windowActionBar">false</item>
    </style>

</resources>

Ja, ich verwende ein AppCompatActivity.

Ich habe festgestellt, dass ich eine ältere Version von appcompat verwende:

com.Android.support:appcompat-v7:22.1.1

Dies scheint auf dem neuesten Stand zu sein:

compile 'com.Android.support:design:22.2.0'

Ebenfalls,

minSdkVersion 16
targetSdkVersion 22

Jetzt setze ich die Sichtbarkeit für mein FAB in einigen Fällen auf GONE, aber dies geschieht, nachdem es aufgeblasen ist, sodass dies nicht das Problem sein kann.

Das funktioniert jetzt mit meinem 5.1-Gerät, aber die Benutzer, die Probleme haben, haben 5.0.

Ist das ein bekannter Fehler oder mache ich etwas falsch?

87
KickingLettuce

com.Android.support:appcompat-v7:21+ Unterstützung für das Abtönen von Widgets auf Geräten hinzugefügt, die vor Android 5.1 (API-Stufe 21) ausgeführt werden. Um dies zu nutzen, müssen Sie das AppCompat -Design erweitern oder festlegen und app:backgroundTint anstelle von Android:backgroundTint verwenden.

Beispiel:

<Android.support.design.widget.FloatingActionButton 
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/fab"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_margin="16dp"
    Android:src="@drawable/icon"
    app:backgroundTint="@color/accent"
    app:borderWidth="0dp" />
224
Markus Rubey

Einfach austauschen

<Android.support.design.widget.FloatingActionButton 
...
...
Android:backgroundTint
/>

zu

<Android.support.design.widget.FloatingActionButton 
...
...
app:backgroundTint
/>
48

Wenn Sie ein VectorDrawableCompat (Vektor-Asset) verwenden, sollten Sie Folgendes verwenden:

app:srcCompat="@drawable/x"

anstatt:

Android:src="@drawable/x"
10
Ab_

Ich hatte das gleiche Problem und habe eine andere Lösung ausprobiert. Bei mir funktionierte es jedoch, sicherzustellen, dass die Bibliotheksversionen für AppCompat und Design Support identisch sind. beispielsweise:

compile 'com.Android.support:appcompat-v7:23.2.0'
compile 'com.Android.support:design:23.2.0'
7
sashk0

Ändern Sie einfach Android in app:

Android:backgroundTint="@color/accent"

Zu:

app:backgroundTint="@color/accent"
3
G.Alima

Sie können diese Meldung auch erhalten, wenn Sie versehentlich verschiedene Versionen der appcompat-Bibliothek in verschiedenen Modulen angegeben haben. Dies ist wahrscheinlich der Fall, wenn Sie ein neues Modul erstellen, da Android Studio standardmäßig die aktuellste Version verwendet.

Eine übersichtliche Vorgehensweise bei Projekten mit mehreren Modulen finden Sie unter: Wie deklariere ich in Gradle gemeinsame Abhängigkeiten an einem einzigen Ort?

3
ehartwell

in meinem Fall lag es an der falschen Konfiguration des Aktivitätsthemas. Das Problem wurde behoben, nachdem ich das App-Thema in Theme.AppCompat.xxx geändert hatte.

0
Stevens