Ich erhalte einen Fehler beim Verwenden des Beamten FloatingActionButton
aus der Support-Designbibliothek von Google.
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 zeigt, ist die Stelle, an der die xml
Datei aufgeblasen wird, und die Zeile in der Datei, die meine ist FloatingActionButton
.
<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 benutze eine AppCompatActivity
.
Mir ist aufgefallen, 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 stelle ich die Sichtbarkeit GONE
für mein FAB in einigen Fällen ein, aber dies erfolgt nach dem Aufblasen, sodass dies nicht das Problem sein kann.
Dies funktioniert nun 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?
quelle
android:backgroundTint
könnte auf Geräten vor dem Lutscher problematisch sein. Verwenden Sieapp:backgroundTint
stattdessen. Ich kann jedoch keine Probleme für 5.0 aufzeigen.app
wie Sie sagen. Fühlen Sie sich frei, es als Antwort hinzuzufügen.Antworten:
com.android.support:appcompat-v7:21+
Unterstützung für das Abtönen von Widgets auf Geräten mit Android 5.1 (API Level 21) hinzugefügt. Um es zu nutzen, stellen Sie sicher, dass Sie dasAppCompat
Thema erweitern oder festlegen undapp:backgroundTint
stattdessen verwendenandroid:backgroundTint
.Beispiel:
quelle
Einfach ersetzen
zu
quelle
Wenn Sie ein
VectorDrawableCompat
(Vektor-Asset) verwenden, sollten Sie Folgendes verwenden:anstatt:
quelle
Ich hatte das gleiche Problem und versuchte eine andere Lösung. Aber das, was für mich funktioniert hat, war sicherzustellen, dass die Versionen der Appcompat- und Design-Support-Bibliothek identisch sind. beispielsweise:
quelle
Eine andere Möglichkeit, diese Nachricht zu erhalten, besteht darin, versehentlich verschiedene Versionen der Appcompat-Bibliothek in verschiedenen Modulen angegeben zu haben. Dies ist wahrscheinlich der Fall, wenn Sie ein neues Modul erstellen, da Android Studio standardmäßig die aktuellste Version verwendet.
Eine übersichtliche Methode zur Verwaltung in Projekten mit mehreren Modulen finden Sie unter: Wie deklariere ich in Gradle allgemeine Abhängigkeiten an einem einzigen Ort?
quelle
Wechseln Sie einfach
android
zuapp
:Zu:
quelle
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.
quelle