Estou recebendo um bug ao usar o oficial FloatingActionButton
da biblioteca de design de suporte do Google.
Aqui está meu 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
A única linha que aponta para meu aplicativo é onde ele aumenta o xml
arquivo e a linha desse arquivo que é meu 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" />
Informação extra:
Aqui está o tema do meu aplicativo:
<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>
Sim, estou usando um AppCompatActivity
.
Percebi que estou usando uma versão mais antiga do appcompat:
com.android.support:appcompat-v7:22.1.1
Parece estar atualizado:
compile 'com.android.support:design:22.2.0'
Além disso,
minSdkVersion 16
targetSdkVersion 22
Agora, eu defino a Visibilidade GONE
em alguns casos para meu FAB, mas isso é depois que ele infla, então esse não pode ser o problema.
Agora, isso funciona com meu dispositivo 5.1, mas os usuários que têm problemas têm 5.0.
Este é um bug conhecido ou talvez eu esteja fazendo algo errado?
android
android-appcompat
inflate-exception
floating-action-button
android-support-design
TheLettuceMaster
fonte
fonte
android:backgroundTint
pode ser problemático em dispositivos pré-pirulito. Use em seuapp:backgroundTint
lugar. No entanto, não posso apontar quaisquer problemas para o 5.0.app
como diz. Sinta-se à vontade para adicioná-lo como resposta.Respostas:
com.android.support:appcompat-v7:21+
adicionado suporte para tingir widgets em dispositivos com Android 5.1 (API de nível 21). Para usá-lo, certifique-se de estender ou definir oAppCompat
Tema e usar emapp:backgroundTint
vez deandroid:backgroundTint
.Exemplo:
fonte
Apenas substitua
para
fonte
Se você estiver usando um
VectorDrawableCompat
(ativo vetorial), deve usar:ao invés de:
fonte
Eu tive o mesmo problema e tentei uma solução diferente. Mas o que funcionou para mim foi garantir que as versões appcompat e design support library sejam as mesmas. por exemplo:
fonte
Outra maneira de obter essa mensagem é se você acidentalmente especificou versões diferentes da biblioteca appcompat em módulos diferentes. É provável que isso aconteça quando você cria um novo módulo, já que o padrão do Android Studio é a versão mais atual.
Para obter uma maneira organizada de gerenciar isso em projetos com vários módulos, consulte: No Gradle, como declaro dependências comuns em um único lugar?
fonte
Basta mudar
android
paraapp
:Para:
fonte
no meu caso, foi por causa da falsa configuração do tema da atividade. O problema foi resolvido depois que mudei o tema do aplicativo para Theme.AppCompat.xxx.
fonte