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


88

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

これが私の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ファイルを拡張する場所と、そのファイル内の行である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" />

追加情報:

これが私のアプリのテーマです:

<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

ここでGONE、FAB のVisibilityをいくつかの場合に設定しますが、これは問題にならないように膨らんだ後です。

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

これは既知のバグですか、それとも何か問題がありますか?


5
android:backgroundTintロリポップ前のデバイスでは問題になる可能性があります。app:backgroundTint代わりに使用してください。ただし、5.0の問題を指摘することはできません。
Markus Rubey

@MarkusRubeyありがとう。変更する価値があります。私はそれを変更し、GradleのappCompatライブラリを更新して、これで問題が解決するかどうかを確認しました。私がテストしたとき、その色合いがあったとしても、5.0より前のデバイスやエミュレータではクラッシュしなかったことがわかります。しかし、すべてのデバイスが同等に作成されているわけではありません...
TheLettuceMaster

1
@MarkusRubeyこの問題を修正したのはあなたのコメントだったと思います。appあなたが言うように使用しない限り、5.1と互換性があると思うティンティングの問題。自由に回答として追加してください。
TheLettuceMaster 2015年

回答:


225

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

5
backgroundTintサポートはAPI 21(Android 5.0)に追加されたことに注意してください:developer.android.com/reference/android/… したがって、仕様によると、サポートライブラリがなくても、Android 5.0でbackgroundTintを使用できるはずです。実際には、クラッシュするようで、サポートライブラリを使用して機能させる必要があります。開発者向けドキュメントでv21とラベル付けされたAPIがv22まで実際に機能しない理由を混乱させている人のために、これについて言及しようと思いました。バグのようです。
OldSchool4664 2015年

50

交換するだけ

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

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

3
xmlns:app = " schemas.android.com/apk/res-auto "名前空間を追加することを忘れないでください!
2017

私の場合の問題は、android:background属性で背景を設定することでした。app:backgroundTintで置き換えて問題を解決しました
Andrey Kolesnikov

13

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

app:srcCompat="@drawable/x"

の代わりに:

android:src="@drawable/x"

7

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

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

3

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

マルチモジュールプロジェクトでこれをきちんと管理する方法については、「Gradleで共通の依存関係を1か所で宣言するにはどうすればよいですか」を参照してください


3

に変更androidしてくださいapp

android:backgroundTint="@color/accent"

に:

app:backgroundTint="@color/accent"

2
Stack Overflowへようこそ!画像とスクリーンショットを投稿に追加すると便利ですが、それらがなくても投稿が明確で有用であることを確認してください。コードの画像やエラーメッセージを投稿しないでください。理由をお読みください。代わりに、実際のコード/メッセージをコピーして貼り付けるか、直接投稿に入力してください。
Filnor

0

私の場合、それは活動テーマの誤った構成が原因でした。アプリのテーマをTheme.AppCompat.xxxに変更した後、問題は解決しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.