Android 官方设计库中带有浮动操作按钮的充气异常

Android 官方设计库中带有浮动操作按钮的充气异常,android,android-appcompat,inflate-exception,floating-action-button,android-support-design,Android,Android Appcompat,Inflate Exception,Floating Action Button,Android Support Design,我使用Google的支持设计库中的官方floatingAction按钮得到一个bug 这是我的日志 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

我使用Google的支持设计库中的官方
floatingAction按钮得到一个bug

这是我的日志

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
额外信息:

以下是我的应用程序主题:

<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>
这似乎是最新的:

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

现在,我确实在某些情况下为我的晶圆厂将可见性设置为
GONE
,但这是在它膨胀之后,所以这不是问题所在

现在,这适用于我的5.1设备,但有问题的用户有5.0


这是一个已知的bug还是我做错了什么?

com.android.support:appcompat-v7:21+
增加了对运行android 5.1之前版本(API级别21)的设备上的着色小部件的支持。要使用它,请确保扩展或设置
AppCompat
主题,并使用
app:backgroundTint
而不是
android:backgroundTint

例如:

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

只需更换

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


获取此消息的另一种方法是在不同模块中意外指定不同版本的appcompat库。当您创建一个新模块时,很可能会发生这种情况,因为Android Studio默认为最新版本


有关在多模块项目中管理此功能的整洁方法,请参阅:

如果您使用的是
VectorDrawableCompat
(Vector资产),则应使用:

app:srcCompat="@drawable/x"
而不是:

android:src="@drawable/x"

我遇到了同样的问题,尝试了不同的解决方案。但对我有效的方法是确保appcompat和design support库版本相同。 例如:

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

在我的例子中,这是因为活动主题的错误配置。在我将应用程序主题更改为theme.AppCompat.xxx之后,问题就解决了。

只需将
android
更改为
app

android:backgroundTint="@color/accent"
致:


android:backgroundTint
在棒棒糖前的设备上可能会很麻烦。改用
app:backgroundTint
。但我不能指出5.0的任何问题。@MarkusRubey谢谢。这是值得改变的。我改变了这一点,并在Gradle中更新了我的appCompat库,并检查这是否解决了这个问题。我知道在我测试的时候,它从未在5.0之前的设备或模拟器上崩溃过,即使我有过这种感觉。但并不是所有的设备都是平等的…@MarkusRubey我相信是你的评论解决了这个问题。我认为5.1以上版本的配色有问题,除非你像你说的那样使用
app
。请注意,backgroundTint支持是在API 21(Android 5.0)中添加的:因此根据规范,您应该能够在Android 5.0中使用backgroundTint,而无需支持库。实际上,它似乎崩溃了,您需要使用支持库使其工作。我只是想我会向那些对开发文档中标记为v21的API在v22之前不起作用感到困惑的人提及这一点;这似乎是一个bug。别忘了添加xmlns:app=”“名称空间!我的问题是用android:background属性设置背景。替换为应用程序:backgroundTint解决了问题欢迎使用堆栈溢出!图片和截图可以很好地添加到帖子中,但请确保没有它们的帖子仍然清晰有用。不要发布代码或错误消息的图像。阅读而是直接将实际代码/消息复制粘贴或键入帖子中。
app:srcCompat="@drawable/x"
android:src="@drawable/x"
compile 'com.android.support:appcompat-v7:23.2.0'
compile 'com.android.support:design:23.2.0'
android:backgroundTint="@color/accent"
app:backgroundTint="@color/accent"