Resmi Tasarım Kitaplığından FloatingActionButton ile InflateException


88

FloatingActionButtonGoogle'ın destek tasarım kitaplığındaki resmi kullanırken bir hata alıyorum .

İşte LogCat'im.

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

Uygulamamı gösteren tek çizgi, xmldosyayı şişirdiği yer ve o dosyadaki benim 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" />

Fazladan bilgi:

İşte benim uygulama temam:

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

Evet, bir AppCompatActivity.

Appcompat'ın daha eski bir sürümünü kullandığımı fark ettim:

com.android.support:appcompat-v7:22.1.1

Bu güncel görünüyor:

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

Ayrıca,

minSdkVersion 16
targetSdkVersion 22

Şimdi, Görünürlüğü GONEbazı durumlarda FAB'ım için ayarlıyorum , ancak bu şişirildikten sonra sorun olamaz.

Şimdi, bu 5.1 cihazımla çalışıyor, ancak sorunları olan kullanıcılar 5.0'a sahip.

Bu bilinen bir hata mı yoksa yanlış bir şey mi yapıyorum?


5
android:backgroundTintlolipop öncesi cihazlarda zahmetli olabilir. app:backgroundTintBunun yerine kullanın . Yine de 5.0 için herhangi bir soruna işaret edemem.
Markus Rubey

@MarkusRubey Teşekkürler. Bu değişmeye değer. Bunu değiştirdim ve Gradle'daki appCompat kitaplığımı güncelledim ve bunun sorunu çözüp çözmediğini kontrol ettim. Bu renk tonuna sahip olmama rağmen test ederken 5.0 öncesi bir cihazda veya emülatörde asla
çökmediğini biliyorum

1
@MarkusRubey Bu sorunu çözenin yorumunuz olduğuna inanıyorum. Söylediğiniz appgibi kullanmadığınız sürece 5.1 up için uyumlu olduğunu düşündüğüm renklendirme ile ilgili bir sorun . Cevap olarak eklemekten çekinmeyin.
TheLettuceMaster

Yanıtlar:


225

com.android.support:appcompat-v7:21+ön android 5.1 (API Seviye 21) çalıştıran cihazlarda renklendirme widget'ları için destek eklendi. Bundan yararlanmak için Temayı genişlettiğinizden veya ayarladığınızdan AppCompatve app:backgroundTintyerine kullandığınızdan emin olun android:backgroundTint.

Misal:

<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
API 21'de (Android 5.0) backgroundTint desteğinin eklendiğini unutmayın: developer.android.com/reference/android/… Bu nedenle, spesifikasyona göre, destek kitaplığı olmadan Android 5.0'da backgroundTint'i kullanabilmeniz gerekir. Pratikte çöküyor gibi görünüyor ve onu çalıştırmak için destek kitaplığını kullanmanız gerekiyor. Dev belgelerinde v21 olarak etiketlenen bir API'nin v22'ye kadar neden gerçekten çalışmadığı konusunda kafası karışan herkes için bundan bahsedeceğimi düşündüm. bir hata gibi görünüyor.
OldSchool4664

50

Sadece değiştir

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

-e

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

3
Xmlns: app = " schemas.android.com/apk/res-auto " ad alanını eklemeyi unutmayın !
Sev

benim durumumda sorun android ile arka plan ayarlamaktı: arka plan özelliği. Uygulama ile değiştirin: backgroundTint sorunu çözdü
Andrey Kolesnikov

13

Bir VectorDrawableCompat(Vektör varlığı) kullanıyorsanız şunları kullanmalısınız:

app:srcCompat="@drawable/x"

onun yerine:

android:src="@drawable/x"

7

Aynı sorunu yaşadım ve farklı bir çözüm denedim. Ama benim için işe yarayan, uygulama uyumlu ve tasarım destek kitaplığı sürümlerinin aynı olmasını sağlamaktı. Örneğin:

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

3

Bu mesajı almanın başka bir yolu da, yanlışlıkla farklı modüllerde appcompat kitaplığının farklı sürümlerini belirtmiş olmanızdır. Android Studio varsayılan olarak en güncel sürüme ayarlandığından, yeni bir modül oluşturduğunuzda bunun gerçekleşmesi muhtemeldir.

Bunu çok modüllü projelerde yönetmenin düzenli bir yolu için bkz .: Gradle'da, ortak bağımlılıkları tek bir yerde nasıl ilan ederim?


3

Sadece değişiklik androidiçin app:

android:backgroundTint="@color/accent"

Kime:

app:backgroundTint="@color/accent"

2
Stack Overflow'a hoş geldiniz! Resimler ve ekran görüntüleri bir gönderiye güzel bir katkı olabilir, ancak lütfen gönderinin onlar olmadan da net ve kullanışlı olduğundan emin olun. Kod veya hata mesajlarının resimlerini göndermeyin. Nedenini okuyun . Bunun yerine gerçek kodu / mesajı kopyalayıp yapıştırın veya doğrudan gönderiye yazın.
Filnor

0

benim durumumda, etkinlik temasının yanlış yapılandırılmasından kaynaklanıyordu. uygulama temasını Theme.AppCompat.xxx olarak değiştirdikten sonra sorun çözüldü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.