Recibo un error al usar el funcionario 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 infla el xml
archivo y la línea en ese archivo que es my 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
.
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 GONE
en algunos casos para mi FAB, pero esto es después de que se infla, por lo 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 un error conocido o quizás estoy haciendo algo mal?
android:backgroundTint
podría ser problemático en dispositivos anteriores a la piruleta. Úselo en suapp:backgroundTint
lugar. Sin embargo, no puedo señalar ningún problema para 5.0.app
como dices. Siéntase libre de agregarlo como respuesta.Respuestas:
com.android.support:appcompat-v7:21+
Se agregó soporte para teñir widgets en dispositivos con versiones anteriores a Android 5.1 (API nivel 21). Para usarlo, asegúrese de extender o configurar elAppCompat
tema y usarlo enapp:backgroundTint
lugar deandroid:backgroundTint
.Ejemplo:
fuente
Solo reemplaza
a
fuente
Si está utilizando un
VectorDrawableCompat
(activo de Vector), debería utilizar:en vez de:
fuente
Tuve el mismo problema y probé una solución diferente. Pero el que funcionó para mí fue asegurarme de que las versiones de la biblioteca de soporte de diseño y appcompat sean las mismas. por ejemplo:
fuente
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 creas un nuevo módulo, ya que Android Studio tiene por defecto la versión más actual.
Para obtener una forma ordenada de administrar esto en proyectos de varios módulos, consulte: En Gradle, ¿cómo declaro dependencias comunes en un solo lugar?
fuente
Solo cambia
android
aapp
:A:
fuente
en mi caso, fue por la falsa configuración del tema de actividad. El problema se resolvió después de que cambié el tema de la aplicación a Theme.AppCompat.xxx.
fuente