android - materialbutton - InflateException con FloatingActionButton de la Biblioteca de diseño oficial
binary xml file line#0 error inflating class android support design widget floatingactionbutton (7)
Otra forma de recibir este mensaje es si accidentalmente especificó diferentes versiones de la biblioteca appcompat en diferentes módulos. Es probable que esto suceda cuando cree un nuevo módulo, ya que Android Studio se predetermina a la versión más actual.
Para una forma ordenada de administrar esto en proyectos de módulos múltiples, vea: En Gradle, ¿cómo declaro dependencias comunes en un solo lugar?
Recibo un error al usar el
FloatingActionButton
oficial 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 infla el archivo
xml
, 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 una
AppCompatActivity
.
Noté 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 la Visibilidad en
GONE
en algún caso para mi FAB, pero esto es después de que se infla, por lo que no puede ser el problema.
Ahora, esto funciona con mi dispositivo 5.1, pero los usuarios que tienen problemas tienen 5.0.
¿Es esto un error conocido o tal vez estoy haciendo algo mal?
Si está usando un
VectorDrawableCompat
(Vector activo), debe usar:
app:srcCompat="@drawable/x"
en lugar de:
android:src="@drawable/x"
Simplemente cambie
android
a la
app
:
android:backgroundTint="@color/accent"
A:
app:backgroundTint="@color/accent"
Solo reemplace
<android.support.design.widget.FloatingActionButton
...
...
android:backgroundTint
/>
a
<android.support.design.widget.FloatingActionButton
...
...
app:backgroundTint
/>
Tuve el mismo problema y probé una solución diferente. Pero lo que funcionó para mí fue asegurar que las versiones de la biblioteca de compatibilidad de aplicaciones y diseño sean las mismas. por ejemplo:
compile ''com.android.support:appcompat-v7:23.2.0''
compile ''com.android.support:design:23.2.0''
en mi caso, fue por la falsa configuración del tema de la actividad. El problema se resolvió después de cambiar el tema de la aplicación a Theme.AppCompat.xxx.
com.android.support:appcompat-v7:21+
agregó soporte para tintar widgets en dispositivos que ejecutan pre android 5.1 (API Nivel 21).
Para usarlo, asegúrese de extender o configurar el tema
AppCompat
y usar
app:backgroundTint
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" />