2016-12-22 8 views
5

मेरे पास एक प्रोजेक्ट है जिसमें बहुत से ड्रॉबल्स हैं, जिन्हें "ए" या "बी" से शुरू किया गया है (उदाहरण के लिए a1_back, a2_back, b1_start, b2_start और कई अन्य)। उन ड्रॉएबल कोड में उपयोग किया जाता है, लेकिन इस्तेमाल किया निम्नलिखित कोड द्वारा:एंड्रॉइड: सभी ड्रॉबल्स को रखने के लिए "सिकुड़ स्रोत स्रोत" बनाएं, लेकिन अन्य अप्रयुक्त संसाधनों को हटाएं

String name = image.getName();//getName() returns for examle "a1_back" 
res = getResources().getIdentifier(name, "drawable", getPackageName()); 

तो, कहीं नहीं कोड में मैं विशिष्ट स्ट्रिंग "a1_back" की क्या ज़रूरत है इस्तेमाल किया। यही कारण है कि जब मैंने "संकीर्ण स्रोतों को सही किया" "मेरे" और "बी" से शुरू होने वाले सभी मेरे ड्रॉबल्स हटा दिए गए हैं।

मैं पढ़ा है कि तुम क्या संसाधनों निम्नलिखित xml फ़ाइल का उपयोग कर रखने के लिए निर्दिष्ट कर सकते हैं कि:

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:tools="http://schemas.android.com/tools" 
    tools:keep="@layout/l_used_c" 
    tools:discard="@layout/unused2" /> 

लेकिन मैं कई ड्रॉएबल के लिए रास्ता है और अलग से हर एक को निर्दिष्ट करने के लिए नहीं करना चाहती। "टूल्स: रखें" में एक पैटर्न सेट करने का कोई तरीका है (सभी "" या "बी" से शुरू होने वाले सभी ड्रॉबल्स को रखने के लिए) या शायद इसे प्रोजेक्ट में सभी ड्रॉबल्स बनाए रखें, लेकिन अन्य अप्रयुक्त संसाधनों को हटा दें?

अग्रिम धन्यवाद! :)

+0

अगर आप केवल संसाधनों के साथ काम कर रहे हैं, एंड्रॉयड स्टूडियो का उपयोग के रूप में Android User Guide में विस्तार से बताया इस चाल का उपयोग का विकल्प होता है पर क्लिक करें ** Refactor ** >> ** निकालें अप्रयुक्त संसाधन **। –

+0

हां, लेकिन मैं नहीं चाहता कि मेरे ड्रॉबल्स को हटा दिया जाए! मैं उन्हें रखना चाहता हूं, लेकिन बाकी सब कुछ हटा दें। – hkop

+0

अप्रयुक्त संसाधनों को हटाएं, फिर ड्रॉबल्स को पुनर्स्थापित करने के लिए अपने स्रोत नियंत्रण प्रोग्राम का उपयोग करें। – nasch

उत्तर

1

एक कामकाज है जिसका आप उपयोग कर सकते हैं। सभी ड्रॉएबल जो आप

@Nullable 
private Drawable getDrawableByName(@NonNull final Context context, @NonNull final String name) { 
    final String prefixName = String.format("prefix_%s", name); 
    return getDrawable(context, prefixName); 
} 

@Nullable 
protected Drawable getDrawable(@NonNull final Context context, @NonNull final String name) { 
    final Resources resources = context.getResources(); 
    final int resourceId = resources.getIdentifier(name, "drawable", context.getPackageName()); 
    try { 
     return resources.getDrawable(resourceId, context.getTheme()); 
    } catch (final Resources.NotFoundException exception) { 
     return null; 
    } 
} 

यहाँ चाल रखना चाहते हैं के लिए एक उपसर्ग जोड़े

final String prefixName = String.format("prefix_%s", name); 

संसाधन सिकुड़ते तंत्र का विश्लेषण करती है कि "prefix_" के साथ सभी ड्रॉएबल इस्तेमाल किया जा सकता है और यह इन फ़ाइलों को स्पर्श नहीं करता है ।

2

जब गतिशील संसाधन तक पहुँचने, इस उदाहरण

String name = String.format("img_%1d", angle + 1); 
res = getResources().getIdentifier(name, "drawable", getPackageName()); 
संबंधित मुद्दे