ऐप के बीच अंतर: srcCompat और Android: Android के लेआउट XML में src


138

जब भी मैं एंड्रॉइड स्टूडियो के वेक्टर एसेट्स का उपयोग करके जोड़े गए आइकन के साथ एक इमेज व्यू बनाता हूं, मुझे लाइन में एक त्रुटि मिल रही है app:srcCompat="@drawable/ic_play"

जब मैं app:srcCompatसाथ बदलता हूं android:src, तो त्रुटि दूर हो जाती है लेकिन आइकन पिक्सेलयुक्त दिखता है।

मुख्य अंतर क्या है

app:srcCompat="@drawable/ic_play"

तथा

android:src="@drawable/ic_play"

जवाबों:


139

एप्लिकेशन: srcCompat

आपके ऐप में वेक्टर ड्रॉबल्स को एकीकृत करने का सबसे मूर्खतापूर्ण तरीका है। वैक्टर ड्रॉइंग आपको एक्सएमएल में परिभाषित एकल वेक्टर ग्राफिक के साथ कई पीएनजी परिसंपत्तियों को बदलने की अनुमति देता है। जबकि पहले लॉलीपॉप और उच्चतर उपकरणों तक सीमित था

ध्यान दें

के रूप में Android समर्थन लाइब्रेरी 23.3.0 , समर्थन वेक्टर ड्रॉएबल केवल के माध्यम से लोड किया जा सकता app:srcCompat

आपको अपनी फ़ाइल में VectorDrawables.useSupportLibrary = true को जोड़ना होगाbuild.gradle

    // Gradle Plugin 2.0+  
 android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 }  

एंड्रॉयड: src

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


2
ऐप के साथ त्रुटि: srcCompact चला गया है जब जोड़ा वेक्टरड्राबल्स.यूज़सुपोर्टलाइंस = ग्रैडल ऐप मॉड्यूल में सच है
ज़ायिद मोहम्मद

3
ऐप होगा: पुराने Android संस्करणों के साथ srcCompat संघर्ष? विशेष रूप से Api 19 सबसे पुराना संस्करण है जिसका मैं उल्लेख कर रहा हूं।
इक्विलोकल

वाह आखिरकार बिटमैप आइकन से छुटकारा मिल सकता है।
मेव कैट 2012

Google प्लस पोस्ट लिंक अब मृत हो गया है
वादिम कोटोव

मैंने ऊपर जोड़ा है build.gradle, लेकिन यह अभी भी काम नहीं कर रहा है, कोई विचार?
डेविड कॉलनान

20

आप उपयोग कर रहे हैं android:src="@drawable/some_vector"बिना vectorDrawables.useSupportLibrary = truebuild.gradle फ़ाइल में और अपने अनुप्रयोग वेक्टर छवियों (वेक्टर drawable), तो निर्माण, जबकि apk फ़ाइल एंड्रॉयड Gradle प्लगइन * से अलग स्क्रीन (HDPI, XHDPI ...) के लिए .png फ़ाइलों का एक बहुत उत्पन्न करता है आपका प्रत्येक वेक्टर ड्रा करने योग्य (केवल एपीआई = <19 के लिए)। परिणाम - APK का बड़ा आकार ।

एंड्रॉइड के app:srcCompat="@drawable/some_vector"साथ उपयोग करते समय vectorDrawables.useSupportLibrary = trueफ़ाइलों को उत्पन्न किए बिना वेक्टर ड्रा करने योग्य फ़ाइलों का उपयोग करता है *.png

आप इसे Android Studio apk विश्लेषक उपकरण के साथ देख सकते हैं। बस के साथ और बिना APK निर्माण vectorDrawables.useSupportLibrary = true

मुझे लगता है कि यह मुख्य अंतर है।


तो अगर आप का उपयोग किया हैसुपोर्टलाइंस सेट करने के लिए सही है, तो आपको एंड्रॉइड के बजाय विशेष सिंटैक्स की आवश्यकता क्यों है: src =? यदि आप android का उपयोग करते हैं: src = useSupportLibrary सक्रिय के साथ, क्या आप PNGs के प्रसार से बचते हैं?
ऑस्कर

9

उपयोग:

app:srcCompat="@drawable/backImage"

SrcCompat विशेषता वास्तव में AppCompat लाइब्रेरी के भीतर परिभाषित की गई है। महत्वपूर्ण: आपको इसके लिए उपयुक्त नामस्थान जोड़ने की आवश्यकता होगी।

xmlns:app="http://schemas.android.com/apk/res-auto"

ध्यान दें

आपको जो मिल रहा है वह सिर्फ एक लिंट त्रुटि है जिसे अनदेखा किया जा सकता है। मैंने एक ही त्रुटि की कोशिश की और प्राप्त किया है, लेकिन यह सही तरीके से काम कर रहा है।

आप tools:ignore="MissingPrefix"अस्थायी रूप से इस त्रुटि को देखने से बचने के लिए उपयोग कर सकते हैं ।

आशा है कि ये आपकी मदद करेगा।


5

(या जैसे कि और उपवर्ग ) के AppCompatसाथ उपयोग करते समय , आप प्लेटफ़ॉर्म के पुराने संस्करणों (साथ ही साथ किसी अन्य उपलब्ध उपलब्ध ) पर वेक्टर ड्रॉबल्स को संदर्भित करने के लिए नई विशेषता का उपयोग करने में सक्षम होंगेImageViewImageButtonFloatingActionButtonapp:srcCompatandroid:src

android.support.v7.appcompat.R.attr.srcCompat :

srcCompat

इस ImageView की सामग्री के रूप में एक ड्रॉबल सेट करता है। प्लेटफ़ॉर्म के पुराने संस्करणों पर चलने पर वेक्टर ड्रॉएबल के उपयोग की अनुमति देता है।

प्रपत्र में किसी अन्य संसाधन, प्रपत्र "@[+][package:]type/name"या विषय विशेषता का संदर्भ हो सकता है "?[package:]type/name"


xmlns:app="http://schemas.android.com/apk/res-auto"उपयोग करते समय जोड़ना न भूलेंapp:srcCompat


4

वैक्टर और एनिमेटेड वैक्टर केवल फ्रेमवर्क के हाल के संस्करणों में समर्थित थे। srcCompat का उपयोग उन्हें काम करने के लिए अनुकूलता पुस्तकालय के साथ किया जा सकता है, लेकिन यह केवल समर्थन पुस्तकालय में कुछ विचारों के साथ काम करता है। ध्यान दें कि ऐप: एंड्रॉइड के बजाय उपयोग किया जाता है:। इसका अर्थ है इसकी रूपरेखा का हिस्सा नहीं, बल्कि आपके ऐप द्वारा परिभाषित पैरामीटर।


3
app:srcCompat="some_resource" 

यह संदर्भित है कि यह AppCompatActivity src है जो समर्थन पुस्तकालय में आता है

android:src="some_resource"

साधारण गतिविधि को संदर्भित करता है।


3

(या जैसे कि और उपवर्ग ) के AppCompatसाथ उपयोग करते समय , आप वेक्टर विशेषताओं (साथ ही साथ किसी अन्य उपलब्ध उपलब्ध ) को संदर्भित करने के लिए नई विशेषता का उपयोग करने में सक्षम होंगे । और यदि आप रनटाइम में ड्राबेल बदल रहे हैं, तो आप पहले की तरह ही विधि का उपयोग कर पाएंगे (कोई परिवर्तन नहीं)।ImageViewImageButtonFloatingActionButtonapp:srcCompatandroid:srcsetImageResource()

उपयोग करना AppCompatऔर app:srcCompatआपके ऐप में वेक्टर ड्रॉबल्स को एकीकृत करने का सबसे मूर्ख तरीका है। आप पाएंगे कि लॉलीपॉपapp:srcCompat से पहले सीधे वेक्टर ड्रॉइंग संदर्भित होंगे जो विफल हो जाएंगे ।


1

एंड्रॉइड 5.0 (एपीआई स्तर 21) और उच्चतर पुराने संस्करणों में वेक्टर ड्रॉबल्स का समर्थन करने के लिए वेक्टर ड्रॉबल समर्थन प्रदान करता है: srcCompat जोड़ा गया था

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