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があります。
これは既知のバグですか、何か間違っているのでしょうか?
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
/>
に
<Android.support.design.widget.FloatingActionButton
...
...
app:backgroundTint
/>
VectorDrawableCompat
(ベクター資産)を使用している場合は、次を使用する必要があります。
app:srcCompat="@drawable/x"
の代わりに:
Android:src="@drawable/x"
同じ問題があり、別の解決策を試しました。しかし、私のために働いたのは、appcompatと設計サポートライブラリのバージョンが同じであることを確認することでした。例えば:
compile 'com.Android.support:appcompat-v7:23.2.0'
compile 'com.Android.support:design:23.2.0'
Android
をapp
に変更するだけです:
Android:backgroundTint="@color/accent"
に:
app:backgroundTint="@color/accent"
このメッセージを取得する別の方法は、誤って異なるモジュールで異なるバージョンのappcompatライブラリを指定した場合です。これは、Android Studioのデフォルトが最新バージョンであるため、新しいモジュールを作成するときに発生する可能性があります。
マルチモジュールプロジェクトでこれを管理するきちんとした方法については、以下を参照してください: Gradleでは、1つの場所で一般的な依存関係を宣言するにはどうすればよいですか?
私の場合、アクティビティテーマの設定が間違っていたためです。アプリのテーマをTheme.AppCompat.xxxに変更した後、問題は解決しました。