नवीनतम अद्यतन - जून / 2019
मूल उत्तर के बाद से समर्थन पुस्तकालय थोड़ा बदल गया है। अब, यहां तक कि ग्रेड के लिए एंड्रॉइड प्लगइन भी निर्माण समय पर स्वचालित रूप से पीएनजी उत्पन्न करने में सक्षम है। तो, नीचे दो नए दृष्टिकोण हैं जो इन दिनों काम करना चाहिए। आप अधिक जानकारी यहाँ पा सकते हैं :
पीएनजी पीढ़ी
ग्रैड बिल्ड समय में स्वचालित रूप से आपकी संपत्ति से PNG चित्र बना सकता है। हालांकि, इस दृष्टिकोण में, सभी xml तत्व समर्थित नहीं हैं । यह समाधान सुविधाजनक है क्योंकि आपको अपने कोड में या बिल्ड में कुछ भी बदलने की आवश्यकता नहीं है। बस सुनिश्चित करें कि आप एंड्रॉइड प्लगइन 1.5.0 या उच्चतर और एंड्रॉइड स्टूडियो 2.2 या उच्चतर का उपयोग कर रहे हैं ।
मैं अपने ऐप में इस समाधान का उपयोग कर रहा हूं और ठीक काम करता हूं। कोई अतिरिक्त build.gradle ध्वज आवश्यक नहीं है। कोई हैक आवश्यक नहीं है। यदि आप / निर्माण / उत्पन्न / Res / pngs / ... आप सभी उत्पन्न PNGs देख सकते हैं।
इसलिए, यदि आपके पास कुछ सरल आइकन हैं (चूंकि सभी xml तत्व समर्थित नहीं हैं), तो यह समाधान आपके लिए काम कर सकता है। बस अपने एंड्रॉइड स्टूडियो और ग्रेड के लिए अपने एंड्रॉइड प्लगइन को अपडेट करें।
लाइब्रेरी का समर्थन करें
शायद, यह समाधान है जो आपके लिए काम करेगा। यदि आप यहां आए हैं, तो इसका मतलब है कि आपका एंड्रॉइड स्टूडियो अपने आप पीएनजी का उत्पादन नहीं कर रहा है। तो, आपका ऐप क्रैश हो रहा है।
या हो सकता है, आप किसी भी PNG को उत्पन्न करने के लिए Android Studio नहीं चाहते हैं।
उस "ऑटो-पीएनजी पीढ़ी" से अलग, जो XML तत्व के सबसेट का समर्थन करता है, यह समाधान, सभी xml टैग का समर्थन करता है। तो, आपको अपने वेक्टर ड्रॉबल का पूरा समर्थन है।
आपको सबसे पहले, इसे बनाने के लिए अपने build.gradle को अपडेट करना होगा :
android {
defaultConfig {
// This flag will also prevents Android Studio from generating PNGs automatically
vectorDrawables.useSupportLibrary = true
}
}
dependencies {
// Use this for Support Library
implementation 'com.android.support:appcompat-v7:23.2.0' // OR HIGHER
// Use this for AndroidX
implementation 'androidx.appcompat:appcompat:1.1.0' // OR HIGHER
}
और फिर, का उपयोग app:srcCompat
करने के बजाय android:src
लोड करते समय VectorDrawables
। यह मत भूलना।
के लिए TextView
, आप उपयोग कर रहे हैं androidx
समर्थन लाइब्रेरी के संस्करण, आप उपयोग कर सकते हैं app:drawableLeftCompat
के बजाय (ठीक है, ऊपर, नीचे या)app:drawableLeft
के मामले में CheckBox
/ के बजाय का RadioButton
उपयोग करें ।app:buttonCompat
android:button
आप उपयोग नहीं कर रहे हैं, तो androidx
समर्थन लाइब्रेरी और अपने के संस्करण minSdkVersion
है 17
या उच्च या एक बटन का उपयोग कर, आप के माध्यम से प्रोग्राम के रूप में स्थापित करने के लिए कोशिश कर सकते हैं
Drawable icon = AppCompatResources.getDrawable(context, <drawable_id>);
textView.setCompoundDrawablesWithIntrinsicBounds(<leftIcon>,<topIcon>,<rightIcon>,<bottomIcon>);
अद्यतन - जुलाई / 2016
उन्होंने एंड्रॉइड सपोर्ट लाइब्रेरी 23.4.0 में वेक्टरड्राइव को फिर से सक्षम किया
AppCompat उपयोगकर्ताओं के लिए , हमने AppCompatDelegate.setCompatVectorFromResourceEnabled (सत्य) के माध्यम से संसाधनों (23.2 में पाया गया व्यवहार) से पुन: सक्षम वेक्टर को फिर से सक्षम करने के लिए एक ऑप्ट-इन एपीआई जोड़ा है - ध्यान रखें कि यह अभी भी स्मृति के उपयोग के साथ समस्याएँ पैदा कर सकता है और कॉन्फ़िगरेशन इंस्टेंसेस को अपडेट करने में समस्याएं, इसलिए यह डिफ़ॉल्ट रूप से अक्षम है।
हो सकता है , build.gradle
सेटिंग अब अप्रचलित हो गई है और आपको इसे उचित गतिविधियों में सक्षम करने की आवश्यकता है (हालांकि, परीक्षण करने की आवश्यकता है)।
अब, इसे सक्षम करने के लिए, आपको यह करना होगा:
public class MainActivity extends AppCompatActivity {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
...
}
मूल उत्तर - अप्रैल / 2016
मुझे लगता है कि यह इसलिए हो रहा है क्योंकि समर्थन वेक्टर नवीनतम लाइब्रेरी संस्करण में अक्षम था: 23.3.0
इस पोस्ट के अनुसार :
AppCompat उपयोगकर्ताओं के लिए, हमने 23.2.0 / 23.2.1 (ISSUE 205236) संस्करण में कार्यान्वयन में पाए जाने वाले मुद्दों के कारण पूर्व-लॉलीपॉप उपकरणों पर संसाधनों से वेक्टर ड्रॉबल्स का उपयोग करने वाले कार्यक्षमता को निकालने का निर्णय लिया है । एप्लिकेशन का उपयोग करना: srcCompat और setImageResource () काम करना जारी रखता है।
यदि आप ISSUE 205236 के मुद्दे पर जाते हैं , तो ऐसा लगता है कि वे भविष्य में सक्षम होंगे लेकिन स्मृति समस्या जल्द ही ठीक नहीं होगी:
अगली रिलीज़ में मैंने एक ऑप्ट-इन एपीआई जोड़ा है जहाँ आप वेक्टरड्राएबल समर्थन को फिर से सक्षम कर सकते हैं जिसे हटा दिया गया था। यह पहले की तरह ही कैवियट के साथ आता है (मेमोरी उपयोग और कॉन्फ़िगरेशन अपडेट के साथ समस्याएं)।
मेरा मुद्दा भी ऐसा ही था। इसलिए, मेरे मामले में, मैंने उन सभी आइकन को वापस कर दिया, जो संसाधन से PNG छवियों के लिए फिर से वेक्टर ड्रा करने योग्य का उपयोग करते हैं (चूँकि वे फिर से सक्षम करने के लिए एक विकल्प प्रदान करने के बाद भी मेमोरी इश्यू होते रहेंगे)।
मुझे यकीन नहीं है कि यह सबसे अच्छा विकल्प है, लेकिन यह मेरी राय में सभी दुर्घटनाओं को ठीक करता है।