web-dev-qa-db-ja.com

公式デザインライブラリのFloatingActionButtonを使用したInflateException

Googleのサポートデザインライブラリの公式FloatingActionButtonを使用してバグが発生しています。

これが私の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

私のアプリを指す唯一の行は、xmlファイルを膨張させる場所と、そのファイル内の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" />

追加情報:

私のアプリのテーマは次のとおりです。

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

はい、AppCompatActivityを使用しています。

古いバージョンのappcompatを使用していることに気付きました:

com.Android.support:appcompat-v7:22.1.1

これは最新のようです:

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

また、

minSdkVersion 16
targetSdkVersion 22

今、私はFABのVisibilityをGONEに設定することがありますが、これは問題にならないように膨らませた後です。

現在、これは私の5.1デバイスで動作しますが、問題があるユーザーには5.0があります。

これは既知のバグですか、何か間違っているのでしょうか?

86
KickingLettuce

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" />
224
Markus Rubey

交換するだけ

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

<Android.support.design.widget.FloatingActionButton 
...
...
app:backgroundTint
/>
48

VectorDrawableCompat(ベクター資産)を使用している場合は、次を使用する必要があります。

app:srcCompat="@drawable/x"

の代わりに:

Android:src="@drawable/x"
10
Ab_

同じ問題があり、別の解決策を試しました。しかし、私のために働いたのは、appcompatと設計サポートライブラリのバージョンが同じであることを確認することでした。例えば:

compile 'com.Android.support:appcompat-v7:23.2.0'
compile 'com.Android.support:design:23.2.0'
7
sashk0

Androidappに変更するだけです:

Android:backgroundTint="@color/accent"

に:

app:backgroundTint="@color/accent"
3
G.Alima

このメッセージを取得する別の方法は、誤って異なるモジュールで異なるバージョンのappcompatライブラリを指定した場合です。これは、Android St​​udioのデフォルトが最新バージョンであるため、新しいモジュールを作成するときに発生する可能性があります。

マルチモジュールプロジェクトでこれを管理するきちんとした方法については、以下を参照してください: Gradleでは、1つの場所で一般的な依存関係を宣言するにはどうすればよいですか?

3
ehartwell

私の場合、アクティビティテーマの設定が間違っていたためです。アプリのテーマをTheme.AppCompat.xxxに変更した後、問題は解決しました。

0
Stevens