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?
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" />
Einfach austauschen
<Android.support.design.widget.FloatingActionButton
...
...
Android:backgroundTint
/>
zu
<Android.support.design.widget.FloatingActionButton
...
...
app:backgroundTint
/>
Wenn Sie ein VectorDrawableCompat
(Vektor-Asset) verwenden, sollten Sie Folgendes verwenden:
app:srcCompat="@drawable/x"
anstatt:
Android:src="@drawable/x"
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'
Ändern Sie einfach Android
in app
:
Android:backgroundTint="@color/accent"
Zu:
app:backgroundTint="@color/accent"
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?
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.