Saya mendapatkan bug menggunakan resmi FloatingActionButton
dari pustaka desain dukungan Google.
Ini LogCat saya.
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
Satu-satunya baris yang mengarah ke aplikasi saya adalah tempat ia memekarkan xml
file, dan baris di file itu yang merupakan milik saya 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" />
Informasi tambahan:
Ini adalah tema aplikasi saya:
<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>
Ya, saya menggunakan file AppCompatActivity
.
Saya perhatikan saya menggunakan appcompat versi lama:
com.android.support:appcompat-v7:22.1.1
Ini sepertinya mutakhir:
compile 'com.android.support:design:22.2.0'
Juga,
minSdkVersion 16
targetSdkVersion 22
Sekarang, saya mengatur Visibilitas ke GONE
dalam beberapa kasus untuk FAB saya, tetapi ini setelah itu mengembang sehingga tidak bisa menjadi masalah.
Sekarang, ini berfungsi dengan perangkat 5.1 saya, tetapi pengguna yang memiliki masalah memiliki 5.0.
Apakah ini bug yang diketahui atau mungkin saya melakukan kesalahan?
sumber
android:backgroundTint
bisa merepotkan pada perangkat pra lollipop. Gunakanapp:backgroundTint
sebagai gantinya. Saya tidak bisa menunjukkan masalah apa pun untuk 5.0.app
seperti yang Anda katakan. Jangan ragu untuk menambahkannya sebagai jawabannya.Jawaban:
com.android.support:appcompat-v7:21+
menambahkan dukungan untuk widget pewarnaan pada perangkat yang menjalankan Android 5.1 (API Level 21). Untuk memanfaatkannya pastikan Anda memperpanjang atau mengaturAppCompat
tema dan menggunakanapp:backgroundTint
bukanandroid:backgroundTint
.Contoh:
<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" />
sumber
Ganti saja
untuk
sumber
Jika Anda menggunakan
VectorDrawableCompat
(aset Vektor), Anda harus menggunakan:app:srcCompat="@drawable/x"
dari pada:
android:src="@drawable/x"
sumber
Saya memiliki masalah yang sama dan mencoba solusi yang berbeda. Tapi yang berhasil bagi saya adalah memastikan bahwa versi pustaka dukungan appcompat dan desain sama. sebagai contoh:
compile 'com.android.support:appcompat-v7:23.2.0' compile 'com.android.support:design:23.2.0'
sumber
Cara lain untuk mendapatkan pesan ini adalah jika Anda tidak sengaja menentukan versi pustaka appcompat yang berbeda dalam modul yang berbeda. Ini mungkin terjadi saat Anda membuat modul baru, karena Android Studio secara default menggunakan versi terbaru.
Untuk cara yang rapi dalam mengelola ini dalam proyek multi-modul, lihat: Di Gradle, bagaimana cara mendeklarasikan dependensi umum di satu tempat?
sumber
Ubah saja
android
keapp
:android:backgroundTint="@color/accent"
Untuk:
app:backgroundTint="@color/accent"
sumber
dalam kasus saya, itu karena konfigurasi tema aktivitas yang salah. masalah terpecahkan setelah saya mengubah tema aplikasi ke Theme.AppCompat.xxx.
sumber