InflateException avec FloatingActionButton de la bibliothèque officielle de Design

j'obtiens un bug en utilisant le FloatingActionButton officiel de la bibliothèque de conception de soutien 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.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.access1(FloatingActionButton.java:56)
at android.support.design.widget.FloatingActionButton.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 où elle gonfle le fichier xml , et la ligne dans 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" />

info supplémentaire:

Voici mon thème app:

<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, je suis à l'aide d'un AppCompatActivity .

j'ai remarqué que j'utilise une ancienne version d'appcompat:

com.android.support:appcompat-v7:22.1.1

Cela semble être jusqu'à ce jour:

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

aussi,

minSdkVersion 16
targetSdkVersion 22

maintenant, je mets la visibilité à GONE dans certains cas pour mon FAB, mais c'est après qu'il se gonfle de sorte que ce ne peut pas être le problème.

Maintenant, cela fonctionne avec mon 5.1 dispositif, 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?

77
demandé sur KickingLettuce 2015-06-16 17:24:27

7 réponses

com.android.support:appcompat-v7:21+ a ajouté le support pour teinter les widgets sur les appareils qui tournent avant android 5.1 (niveau API 21). Pour l'utiliser, assurez-vous d'étendre ou de définir le thème AppCompat et utilisez app:backgroundTint au lieu de android:backgroundTint .

exemple:

<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" />
206
répondu Markus Rubey 2015-06-17 15:28:42

remplacer

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

à

<android.support.design.widget.FloatingActionButton 
...
...
app:backgroundTint
/>
45
répondu Abhijeet Mallick 2016-03-26 10:27:01

si vous utilisez un VectorDrawableCompat (vecteur actif) vous devez utiliser:

app:srcCompat="@drawable/x"

au lieu de:

android:src="@drawable/x"
8
répondu Ab_ 2018-06-24 22:25:14

j'ai eu le même problème et essayé une solution différente. Mais celui qui a fonctionné pour moi était de s'assurer que appcompat et les versions de bibliothèque de soutien de conception sont les mêmes. par exemple:

compile 'com.android.support:appcompat-v7:23.2.0'
compile 'com.android.support:design:23.2.0'
7
répondu sashk0 2016-10-31 16:18:15

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, puisque Android Studio par défaut à la version la plus récente.

pour une façon ordonnée de gérer cela dans les projets multi-modules, voir: dans Gradle, Comment puis-je déclarer des dépendances communes en un seul endroit?

3
répondu ehartwell 2017-05-23 11:47:29

changer simplement android en app :

android:backgroundTint="@color/accent"

à:

app:backgroundTint="@color/accent"
2
répondu G.Alima 2018-04-20 12:15:58

dans mon cas, c'était à cause de la configuration erronée du thème d'activité. le problème a été résolu après que j'ai changé de thème d'application.AppCompat.xxx.

0
répondu Stevens 2018-03-29 03:02:36