Pregunta InflateException con FloatingActionButton de Official Design Library


Estoy obteniendo un error usando el oficial FloatingActionButton de la biblioteca de diseño de soporte de Google.

Aquí está mi 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 única línea que apunta a mi aplicación es donde se infla el xml archivo, y la línea en ese archivo que es mi 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" />

Información extra:

Aquí está el tema de mi aplicación:

<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>

Sí, estoy usando un AppCompatActivity.

Me di cuenta de que estoy usando una versión anterior de appcompat:

com.android.support:appcompat-v7:22.1.1

Esto parece estar actualizado:

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

También,

minSdkVersion 16
targetSdkVersion 22

Ahora, configuro Visibilidad para GONE en algún caso para mi FAB, pero esto es después de que se infla así que ese no puede ser el problema.

Ahora, esto funciona con mi dispositivo 5.1, pero los usuarios que tienen problemas tienen 5.0.

¿Es este un error conocido o quizás estoy haciendo algo mal?


73
2018-06-16 14:24


origen


Respuestas:


com.android.support:appcompat-v7:21+ soporte adicional para tinte de widgets en dispositivos que ejecutan pre android 5.1 (Nivel de API 21). Para hacer uso de él, asegúrese de extender o configurar el AppCompat Tema y uso app:backgroundTint en lugar de android:backgroundTint.

Ejemplo:

<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" />

201
2018-06-17 15:28



Simplemente reemplace

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

a

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

42
2018-03-03 10:23



Si estás usando un VectorDrawableCompat (Vector activo) debe usar:

app:srcCompat="@drawable/x"

en lugar de:

android:src="@drawable/x"

8
2017-10-16 12:53



Tuve el mismo problema e intenté una solución diferente. Pero el que funcionó para mí fue asegurar que las versiones de la biblioteca de compatibilidad de aplicaciones y diseños sean las mismas. por ejemplo:

compile 'com.android.support:appcompat-v7:23.2.0'
compile 'com.android.support:design:23.2.0'

7
2017-10-31 16:18



Otra forma de obtener este mensaje es si accidentalmente especificó diferentes versiones de la biblioteca appcompat en diferentes módulos. Es probable que esto ocurra cuando crea un nuevo módulo, ya que Android Studio se establece de manera predeterminada en la versión más reciente.

Para una forma ordenada de gestionar esto en proyectos de varios módulos, ver: En Gradle, ¿cómo declaro las dependencias comunes en un solo lugar?


3
2017-09-23 20:23



Solo cambia android a app:

android:backgroundTint="@color/accent"

A:

app:backgroundTint="@color/accent"

2
2018-04-20 11:32



en mi caso, fue por la falsa configuración del tema de actividad. problema fue resuelto después de que cambié el tema de la aplicación a Theme.AppCompat.xxx.


0
2018-03-29 03:02