Je reçois un bug en utilisant le fonctionnaire FloatingActionButton
de la bibliothèque de conception de support de Google.
Voici mon 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
La seule ligne qui pointe vers mon application est l'endroit où elle gonfle le xml
fichier et la ligne de ce fichier qui est mon 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" />
Informaitons supplémentaires:
Voici mon thème d'application:
<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>
Oui, j'utilise un AppCompatActivity
.
J'ai remarqué que j'utilise une ancienne version de appcompat:
com.android.support:appcompat-v7:22.1.1
Cela semble être à jour:
compile 'com.android.support:design:22.2.0'
Aussi,
minSdkVersion 16
targetSdkVersion 22
Maintenant, je règle la visibilité sur GONE
dans certains cas pour mon FAB, mais c'est après qu'il se gonfle, donc cela ne peut pas être le problème.
Maintenant, cela fonctionne avec mon appareil 5.1, mais les utilisateurs qui ont des problèmes ont 5.0.
Est-ce un bug connu ou peut-être que je fais quelque chose de mal?
la source
android:backgroundTint
pourrait être gênant sur les appareils pré sucette. Utilisezapp:backgroundTint
plutôt. Je ne peux cependant signaler aucun problème pour la version 5.0.app
comme vous le dites. N'hésitez pas à l'ajouter comme réponse.Réponses:
com.android.support:appcompat-v7:21+
Ajout de la prise en charge des widgets de teinture sur les appareils fonctionnant avant Android 5.1 (niveau d'API 21). Pour l'utiliser, assurez-vous d'étendre ou de définir leAppCompat
thème et de l'utiliser à laapp:backgroundTint
place deandroid:backgroundTint
.Exemple:
la source
Remplacez simplement
à
la source
Si vous utilisez un
VectorDrawableCompat
(élément vectoriel), vous devez utiliser:au lieu de:
la source
J'ai eu le même problème et j'ai essayé une solution différente. Mais celui qui a fonctionné pour moi était de m'assurer que les versions de la bibliothèque de support d'application et de conception sont les mêmes. par exemple:
la source
Une autre façon d'obtenir ce message est si vous avez accidentellement spécifié différentes versions de la bibliothèque appcompat dans différents modules. Cela est susceptible de se produire lorsque vous créez un nouveau module, car Android Studio utilise par défaut la version la plus récente.
Pour un moyen efficace de gérer cela dans les projets multi-modules, voir: Dans Gradle, comment déclarer des dépendances communes en un seul endroit?
la source
Changez simplement
android
pourapp
:À:
la source
dans mon cas, c'était à cause de la fausse configuration du thème de l'activité. Le problème a été résolu après avoir changé le thème de l'application en Theme.AppCompat.xxx.
la source