आधिकारिक डिजाइन लाइब्रेरी से फ़्लोटिंगएशनबटन के साथ इनफ़्लैटेस्टैप्शन


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है, वह है जहाँ यह फ़ाइल को फुलाती है , और उस फ़ाइल की लाइन जो मेरी है 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" />

अधिक जानकारी:

यहाँ मेरे app विषय है:

<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 के लिए कुछ मामले में दृश्यता सेट करता हूं, लेकिन यह इसके बाद फुलाया जाता है ताकि यह समस्या न हो।

अब, यह मेरे 5.1 डिवाइस के साथ काम करता है, लेकिन जिन उपयोगकर्ताओं के पास समस्या है उनमें 5.0 है।

यह एक ज्ञात बग है या शायद मैं कुछ गलत कर रहा हूं?


5
android:backgroundTintलॉलीपॉप से ​​पहले के उपकरणों पर परेशानी हो सकती है। उपयोगapp:backgroundTintइसके बजाय । मैं 5.0 के लिए किसी भी मुद्दे को इंगित नहीं कर सकता, हालांकि।
मार्कस रूबी

@MarkusRubey धन्यवाद। यह बदलने लायक है। मैंने उसे बदल दिया और ग्रेड में अपनी ऐप-कॉम लाइब्रेरी को अपडेट किया और यह देखने के लिए जाँच की कि क्या यह समस्या ठीक करता है। मुझे पता है कि यह मेरे लिए एक पूर्व 5.0 डिवाइस या एमुलेटर पर कभी दुर्घटनाग्रस्त नहीं हुआ था जब मैं परीक्षण कर रहा था, जबकि मेरे पास वह टिंट था। लेकिन सभी डिवाइस समान नहीं बनाए गए ...
TheLettuceMaster

1
@MarkusRubey मुझे विश्वास है कि यह आपकी टिप्पणी थी जिसने इस समस्या को ठीक किया। टिनिंग के साथ एक समस्या जो मुझे लगता है कि 5.1 अप के लिए संगत है जब तक आप appजैसे कहते हैं , वैसे ही उपयोग करें । इसे उत्तर के रूप में जोड़ने के लिए स्वतंत्र महसूस करें।
TheLettuceMaster

जवाबों:


225

com.android.support:appcompat-v7:21+प्री एंड्रॉइड 5.1 (एपीआई स्तर 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
ध्यान दें कि API 21 (Android 5.0) में बैकग्राउंड सपोर्ट को जोड़ा गया था: developer.android.com/reference/android/… इसलिए, कल्पना के अनुसार, आपको सपोर्ट लाइब्रेरी के बिना एंड्रॉइड 5.0 में बैकग्राउंड टिंट का उपयोग करने में सक्षम होना चाहिए। व्यवहार में, यह क्रैश लगता है, और आपको इसे काम करने के लिए समर्थन पुस्तकालय का उपयोग करने की आवश्यकता है। मैंने सोचा था कि मैं किसी और के लिए इसका उल्लेख करूंगा कि क्यों एक एपीआई को देव दस्तावेज में v21 के रूप में लेबल किया गया जो वास्तव में v22 तक काम नहीं करता है; यह एक बग लगता है।
OldSchool4664 21

50

बस प्रतिस्थापित करें

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

सेवा

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

3
Xmlns को जोड़ना न भूलें: app = " schemas.android.com/apk/res-auto " नामस्थान!
सेव

मेरे मामले में समस्या Android के साथ पृष्ठभूमि सेट कर रही थी: पृष्ठभूमि विशेषता। एप्लिकेशन के साथ बदलें: पृष्ठभूमि ने समस्या हल की
एंड्री

13

यदि आप एक VectorDrawableCompat(सदिश संपत्ति) का उपयोग कर रहे हैं, तो आपको उपयोग करना चाहिए:

app:srcCompat="@drawable/x"

के बजाय:

android:src="@drawable/x"

7

मेरे पास एक ही मुद्दा था और विभिन्न समाधान की कोशिश की। लेकिन मेरे लिए काम करने वाले को यह सुनिश्चित करना था कि ऐप्पोमैट और डिज़ाइन समर्थन लाइब्रेरी संस्करण समान हैं। उदाहरण के लिए:

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

3

इस संदेश को प्राप्त करने का एक अन्य तरीका यह है कि यदि आपने गलती से विभिन्न मॉड्यूलों में एप्कोमेट लाइब्रेरी के विभिन्न संस्करणों को निर्दिष्ट कर दिया है। यह तब होता है जब आप एक नया मॉड्यूल बनाते हैं, क्योंकि एंड्रॉइड स्टूडियो सबसे मौजूदा संस्करण में चूक जाता है।

मल्टी-मॉड्यूल परियोजनाओं में इसे प्रबंधित करने के एक सुव्यवस्थित तरीके के लिए, देखें: ग्रैडल में, मैं एक ही स्थान पर सामान्य निर्भरता कैसे घोषित करूं?


3

बस इसमें परिवर्तन androidकरें app:

android:backgroundTint="@color/accent"

सेवा:

app:backgroundTint="@color/accent"

2
ढेर अतिप्रवाह में आपका स्वागत है! चित्र और स्क्रीनशॉट एक पोस्ट के लिए एक अच्छा जोड़ हो सकता है, लेकिन कृपया सुनिश्चित करें कि पोस्ट उनके बिना अभी भी स्पष्ट और उपयोगी है। कोड या त्रुटि संदेशों की छवियां पोस्ट न करें। पढ़ें क्यों । इसके बजाय सीधे पोस्ट में वास्तविक कोड / संदेश को कॉपी और पेस्ट करें या टाइप करें।
फाइलनॉर

0

मेरे मामले में, यह गतिविधि विषय के गलत कॉन्फ़िगरेशन के कारण था। i.AppCompat.xxx में ऐप थीम बदलने के बाद समस्या हल हो गई थी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.