2015-06-30 8 views
5

से मैंने जवाब here का प्रयास किया, लेकिन यह मेरे लिए काम नहीं किया। मैं पृष्ठभूमि के रूप में एक एक्सएमएल का उपयोग कर रहा हूं और छोड़कर - Resources$NotFoundException: File res/drawable/list_selector_white.xml from drawable resource ID प्राप्त कर रहा हूं। ऐप लॉन्च पर दुर्घटनाग्रस्त है।

अजीब हिस्सा यह लॉलीपॉप चलाने वाले उपकरणों पर ठीक काम कर रहा है। ओएस < = किटकैट पर, यह समस्या reproing है।

एक्सएमएल किस अंश में फुलाया जा रहा है:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/list_selector_white" > 
    ....Other views here.... 

list_selector_white.xml

<!-- Selector style for listrow --> 
    <item android:drawable="@drawable/gradient_bg_white" android:state_pressed="false" android:state_selected="false"/> 
    <item android:drawable="@drawable/gradient_bg_hover" android:state_pressed="true"/> 
    <item android:drawable="@drawable/gradient_bg_hover" android:state_pressed="false" android:state_selected="true"/> 

gradient_bg_hover

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <!-- Gradient BgColor for listrow Selected --> 
    <gradient 
     android:startColor="?attr/listViewRow" 
     android:centerColor="?attr/listViewRow" 
     android:endColor="?attr/listViewRow" 
     android:angle="270" /> 
</shape> 

Logcat:

E/AndroidRuntime(3879): android.view.InflateException: Binary XML file line #2: Error inflating class <unknown> 
E/AndroidRuntime(3879): at android.view.LayoutInflater.createView(LayoutInflater.java:620) 
E/AndroidRuntime(3879): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
E/AndroidRuntime(3879): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669) 
E/AndroidRuntime(3879): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694) 
E/AndroidRuntime(3879): at android.view.LayoutInflater.inflate(LayoutInflater.java:469) 
E/AndroidRuntime(3879): at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
E/AndroidRuntime(3879): at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
E/AndroidRuntime(3879): at jsoup.LazyAdapterDoubleList.getView(LazyAdapterDoubleList.java:53) 
E/AndroidRuntime(3879): at android.widget.AbsListView.obtainView(AbsListView.java:2263) 
E/AndroidRuntime(3879): at android.widget.ListView.measureHeightOfChildren(ListView.java:1263) 
E/AndroidRuntime(3879): at android.widget.ListView.onMeasure(ListView.java:1175) 
E/AndroidRuntime(3879): at android.view.View.measure(View.java:16497) 
E/AndroidRuntime(3879): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719) 
E/AndroidRuntime(3879): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455) 
E/AndroidRuntime(3879): at android.view.View.measure(View.java:16497) 
E/AndroidRuntime(3879): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719) 
E/AndroidRuntime(3879): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455) 
E/AndroidRuntime(3879): at android.view.View.measure(View.java:16497) 
E/AndroidRuntime(3879): at android.support.v4.widget.SwipeRefreshLayout.onMeasure(SwipeRefreshLayout.java:577) 
E/AndroidRuntime(3879): at android.view.View.measure(View.java:16497) 
E/AndroidRuntime(3879): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
E/AndroidRuntime(3879): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
E/AndroidRuntime(3879): at android.view.View.measure(View.java:16497) 
E/AndroidRuntime(3879): at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:868) 
E/AndroidRuntime(3879): at android.view.View.measure(View.java:16497) 
E/AndroidRuntime(3879): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
E/AndroidRuntime(3879): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
E/AndroidRuntime(3879): at android.view.View.measure(View.java:16497) 
E/AndroidRuntime(3879): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
E/AndroidRuntime(3879): at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327) 
E/AndroidRuntime(3879): at android.view.View.measure(View.java:16497) 
E/AndroidRuntime(3879): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
E/AndroidRuntime(3879): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
E/AndroidRuntime(3879): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291) 
E/AndroidRuntime(3879): at android.view.View.measure(View.java:16497) 
E/AndroidRuntime(3879): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916) 
E/AndroidRuntime(3879): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113) 
E/AndroidRuntime(3879): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295) 
E/AndroidRuntime(3879): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 
E/AndroidRuntime(3879): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670) 
E/AndroidRuntime(3879): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 
E/AndroidRuntime(3879): at android.view.Choreographer.doCallbacks(Choreographer.java:574) 
E/AndroidRuntime(3879): at android.view.Choreographer.doFrame(Choreographer.java:544) 
E/AndroidRuntime(3879): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 
E/AndroidRuntime(3879): at android.os.Handler.handleCallback(Handler.java:733) 
E/AndroidRuntime(3879): at android.os.Handler.dispatchMessage(Handler.java:95) 
E/AndroidRuntime(3879): at android.os.Looper.loop(Looper.java:136) 
E/AndroidRuntime(3879): at android.app.ActivityThread.main(ActivityThread.java:5017) 
E/AndroidRuntime(3879): at java.lang.reflect.Method.invoke(Native Method) 
E/AndroidRuntime(3879): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
E/AndroidRuntime(3879): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
E/AndroidRuntime(3879): Caused by: java.lang.reflect.InvocationTargetException 
E/AndroidRuntime(3879): at java.lang.reflect.Constructor.newInstance(Native Method) 
E/AndroidRuntime(3879): at android.view.LayoutInflater.createView(LayoutInflater.java:594) 
E/AndroidRuntime(3879): ... 50 more 
E/AndroidRuntime(3879): Caused by: android.content.res.Resources$NotFoundException: File res/drawable/list_selector_white.xml from drawable resource ID #0x7f02006a 
E/AndroidRuntime(3879): at android.content.res.Resources.loadDrawable(Resources.java:2096) 
E/AndroidRuntime(3879): at android.content.res.TypedArray.getDrawable(TypedArray.java:602) 
E/AndroidRuntime(3879): at android.view.View.<init>(View.jav 
W/ActivityManager( 589): Force finishing activity free.programming.programming/.MainActivity 
W/ActivityManager( 589): Activity pause timeout for ActivityRecord{655864a8 u0 free.programming.programming/.MainActivity t49 f} 

इसे ठीक करने पर कोई नेतृत्व?

[संपादित करें]
मैं drawable में attr का उपयोग कर संदिग्ध समस्या आ रही है। प्रारंभ में, मैं सरल @color/... का उपयोग कर रहा था और सब कुछ ठीक काम कर रहा था।

+0

gradient_bg_hover एक रंग है? – Blackbelt

+0

नहीं। इसका एक ड्रॉबल एक्सएमएल –

+0

ड्रॉइंग कहां है? 'रेस/drawable-v21'? : डी – ataulm

उत्तर

5

मैं अंततः इस मुद्दे को ठीक करने में सक्षम था। मैं उत्तर पोस्ट करूंगा ताकि यह भविष्य के पाठकों की मदद कर सके।

समस्या यह है कि हम item और gradient पर एटीआर मान नहीं दे सकते हैं। मुझे रंगों के लिए अलग-अलग एक्सएमएल फाइलों को लेकर समस्या हल हो गई।

मैं करने के लिए list_selector_white_1 और _2.xml के विभिन्न संस्करणों का उपयोग कर समाप्त हो गया:

<!-- Selector style for listrow --> 
<item android:drawable="@drawable/gradient_bg_white_1" android:state_pressed="false" android:state_selected="false"/> 
<item android:drawable="@drawable/gradient_bg_hover_1" android:state_pressed="true"/> 
<item android:drawable="@drawable/gradient_bg_hover_1" android:state_pressed="false" android:state_selected="true"/> 

इसी तरह, मैं gradient_bg_hover बदल गया है और विभिन्न संस्करणों के लिए gradient_bg_white।

अंत में, मैं प्रारूप integer साथ एक विशेषता list_selector बनाया है और टुकड़ा एक्सएमएल में इसका इस्तेमाल किया:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="?attr/list_selector" > 
    ....Other views here.... 

मैं समय था जब मैं एपीआई स्तर> = 21 मेरे एप्लिकेशन में, क्रम में करने के लिए समर्थन कर सकते हैं के लिए इंतज़ार कर रहा हूँ इन सभी हैक्स को हटा दें।

+0

धन्यवाद, आपने मुझे बचाया - मैं एक कोने त्रिज्या को परिभाषित कर रहा था? attr/actionBarSize और यह प्री-लॉलीपॉप पर क्रैश हो रहा था। मैंने इसे 56 डीपी में बदल दिया और ठीक काम करता है - मेरे मामले में यह बहुत महत्वपूर्ण नहीं है कई डीपीएस कि लेकिन अगर आपको वास्तव में इसकी ज़रूरत है, तो यह बेकार है – user2302510

3

मूल रूप से नहीं, यह bug that was fixed in Lollipop है। सुझाव (जब तक आप minSdkVersion=21 नहीं कर सकते) आपको आवश्यक प्रत्येक अलग-अलग रंग के लिए एक अलग ड्रॉबल एक्सएमएल फ़ाइल बनाना है (और यह एक थीम विशेषता के रूप में है, मुझे लगता है)।

डुप्लिकेट सवाल, जवाब और टिप्पणियों इस बग पर चर्चा: How to reference colour attribute in drawable?

8

मैं एक ही समस्या थी। समस्या यह है कि आप अपने ड्राइटेबल में ?attr/ का उपयोग कर रहे हैं। इसे @color या @drawable के साथ बदलें और इसे दूर जाना चाहिए। दुर्भाग्यवश यह है कि आपको अपने प्रत्येक थीम के लिए एक ड्रॉबल बंडल करना होगा, यह लॉलीपॉप में बहुत साफ है।

जिस परियोजना पर मैं काम कर रहा हूं उस पर मेरा this commit देखें, यह वास्तव में इस समस्या को हल करना था।

आप एक drawable-v21 फ़ोल्डर बनाने और एक अच्छा समय है जब आप का समर्थन कर सकते V21 + की उम्मीद में इसके तहत एक drawable डाल लेकिन मैं अन्य मार्ग जाने के लिए और अलग रंग संसाधनों बंडल (कुछ आप मुख्य शाखा में देख सकते हैं करने के लिए चुन सकते थे , मेरे पास टील और डिफ़ॉल्ट हरे रंग के रंग हैं)।

संबंधित मुद्दे