android - कांस्ट्रेन्थलाईट और रिलेटिवलैट के बीच अंतर




android-layout android-relativelayout (8)

मैं ConstraintLayout और ConstraintLayout बीच के अंतर को लेकर उलझन में हूं। क्या कोई मुझे उनके बीच सटीक अंतर बता सकता है?


@ धवल-जिवानी जवाब के अलावा।

मैंने प्रोजेक्ट गिथब प्रोजेक्ट को नवीनतम लेआउट v.1.1.0-beta3 के नवीनतम संस्करण में अपडेट किया है

मैंने ऑन-क्रिएट विधि के समय को मापा और तुलना की है और ऑन-क्रिएट की एक शुरुआत और सीपीयू मॉनिटर में दिखाई देने वाली अंतिम प्रीफॉर्मड्रॉ विधि के निष्पादन के अंत के बीच का समय। सभी परीक्षण एंड्रॉइड 6.0.1 के साथ सैमसंग एस 5 मिनी पर किए गए थे। यहां परिणाम:

नई शुरुआत (एप्लिकेशन लॉन्च के बाद पहली बार स्क्रीन खोलना)

अंतरंग परिस्थिति

ऑनक्रिएट: 123 मी

अंतिम प्रीफॉर्मड्रॉ टाइम - ऑनक्रीट समय: 311.3ms

बाधा लेआउट

ऑनक्रिएट: 120.3ms

अंतिम प्रीफॉर्मड्रॉ टाइम - ऑनक्रिएट टाइम: 310 मी

इसके अलावा, मैंने इस article से प्रदर्शन परीक्षण की जाँच की है, यहाँ कोड दिया है और पाया कि लूप पर 100 से अधिक बाधाएं कम होती हैं वैरिएंट तेजी से प्रवाह, माप और लेआउट के निष्पादन के दौरान तेज होता है और फिर रिलेटिव लेआउट के साथ वेरिएंट। और एंड्रॉइड 4.3 के साथ सैमसंग एस 3 जैसे पुराने एंड्रॉइड डिवाइसों पर, अंतर बड़ा है।

निष्कर्ष के रूप में मैं article टिप्पणियों से सहमत हूं:

क्या यह पुराने विचारों को रिलेटिव लियूट या लिनियर लयआउट से स्विच करने के लायक है?

हमेशा की तरह: यह निर्भर करता है 🙂

जब तक आप या तो अपने वर्तमान लेआउट पदानुक्रम के साथ एक प्रदर्शन समस्या है या आप लेआउट में महत्वपूर्ण परिवर्तन करना चाहते हैं जब तक मैं कुछ भी नहीं refactor होगा। हालाँकि, मैंने इसे हाल ही में नहीं मापा है, मुझे पिछले रिलीज़ में कोई प्रदर्शन समस्या नहीं मिली है। इसलिए मुझे लगता है कि आपको इसका उपयोग करने के लिए सुरक्षित होना चाहिए। लेकिन - जैसा कि Ivv ने कहा - बस पलायन के लिए पलायन न करें। केवल तभी करें, यदि इसके लिए कोई आवश्यकता है और इससे लाभान्वित हों। नए लेआउट के लिए, हालांकि, मैं लगभग हमेशा कॉन्स्ट्रेन्डलैट का उपयोग करता हूं। पहले की तुलना में यह बहुत बेहतर है।


आधिकारिक तौर पर, ConstraintLayout बहुत तेज है

एंड्रॉइड के एन रिलीज़ में, ConstraintLayout क्लास ConstraintLayout लिए समान कार्यक्षमता प्रदान करता है, लेकिन काफी कम लागत पर।


एक बड़ा अंतर यह है कि अगर दृश्य चला जाता है, तो भी कॉन्स्ट्रेनल लयआउट बाधाओं का सम्मान करता है। यदि आपके पास एक श्रृंखला है और आप बीच में एक दृश्य गायब करना चाहते हैं तो यह लेआउट को नहीं तोड़ेगा।


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


निम्नलिखित अंतर / लाभ हैं:

  1. बाधा लेआउट में सापेक्ष लेआउट के साथ-साथ रैखिक लेआउट दोनों की दोहरी शक्ति है: विचारों के सापेक्ष स्थान निर्धारित करें (जैसे सापेक्ष लेआउट) और गतिशील यूआई के लिए वजन भी निर्धारित करें (जो केवल रैखिक लेआउट में संभव था)।

  2. एक बहुत शक्तिशाली उपयोग श्रृंखला बनाकर तत्वों का समूहन है। इस तरह हम विचारों के एक समूह का निर्माण कर सकते हैं, जो कि एक पूरे समूह को बनाने के लिए सिर्फ पदानुक्रम की एक और परत को जोड़े बिना एक वांछित तरीके से रखा जा सकता है।

  3. भार के अतिरिक्त, हम क्षैतिज और ऊर्ध्वाधर पूर्वाग्रह लागू कर सकते हैं जो केंद्र से विस्थापन के प्रतिशत के अलावा कुछ भी नहीं है। (०.५ के पूर्वाग्रह का अर्थ केन्द्रित रूप से संरेखित करना है। संबंधित दिशा में किसी भी मूल्य के कम या अधिक होने का मतलब है कि संबंधित गति।

  4. एक और बहुत महत्वपूर्ण विशेषता यह है कि यह GONE विचारों को संभालने के लिए कार्यक्षमता का सम्मान करता है और प्रदान करता है ताकि लेआउट को तोड़ न जाए यदि कुछ दृश्य जावा कोड के माध्यम से GONE पर सेट किए जाते हैं। और अधिक यहाँ पाया जा सकता है: https://developer.android.com/reference/android/support/constraint/ConstraintLayout.html#VisibilityBehavior

  5. ब्लू प्रिंट और विजुअल एडिटर टूल के उपयोग से स्वचालित अवरोधन की शक्ति प्रदान करता है जिससे पेज डिजाइन करना आसान हो जाता है।

इन सभी विशेषताओं से दृश्य पदानुक्रम का चपटेपन का कारण बनता है जो प्रदर्शन में सुधार करता है और उत्तरदायी और गतिशील UI बनाने में भी मदद करता है जो विभिन्न स्क्रीन आकार और घनत्व के लिए आसानी से अनुकूल हो सकता है।

यहाँ पर जल्दी से सीखने के लिए सबसे अच्छी जगह है: https://codelabs.developers.google.com/codelabs/constraint-layout/#0


निष्कर्ष मैं बना सकता हूं

1) हम कोड के xml हिस्से को छूने के बिना यूआई डिजाइन कर सकते हैं , ईमानदार होने के लिए मुझे लगता है कि Google ने कॉपी किया है कि आईओएस ऐप में यूआई कैसे डिज़ाइन किया गया है , यह समझ में आएगा कि क्या आप आईओएस में यूआई के विकास से परिचित हैं, लेकिन सापेक्ष लेआउट में एक्सएमएल डिजाइन को छूने के बिना बाधाओं को सेट करना मुश्किल है

2) दूसरे में अन्य लेआउट के विपरीत फ्लैट दृश्य पदानुक्रम है , इसलिए सापेक्ष लेआउट से बेहतर प्रदर्शन होता है जिसे आपने अन्य उत्तरों से देखा होगा।

3) इसमें अतिरिक्त चीजें भी होती हैं, जो सापेक्ष लेआउट के अलावा होती हैं, जैसे कि गोलाकार सापेक्ष स्थिति, जहां हम एक दूसरे के सापेक्ष इस दृश्य को किसी निश्चित कोण पर रख सकते हैं, जो सापेक्ष लेआउट में नहीं कर सकता है

मैं इसे फिर से कह रहा हूं, कसना लेआउट का उपयोग करके यूआई डिजाइन करना iOS में यूआई डिजाइन करने के समान है, इसलिए भविष्य में यदि आप आईओएस पर काम करते हैं तो आपको आसान होगा यदि आपने बाधा लेआउट का उपयोग किया है


सापेक्ष लेआउट और बाधा लेआउट समतुल्य गुण

(1) सापेक्ष लेआउट:

android:layout_centerInParent="true"    

(1) बाधा लेआउट समतुल्य:

app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"

(2) सापेक्ष लेआउट:

android:layout_centerHorizontal="true"

(2) बाधा लेआउट समतुल्य:

app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintEnd_toEndOf="parent"

(3) सापेक्ष लेआउट:

android:layout_centerVertical="true"    

(3) बाधा लेआउट समतुल्य:

app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"

(4) सापेक्ष लेआउट:

android:layout_alignParentLeft="true"   

(4) बाधा लेआउट समतुल्य:

app:layout_constraintLeft_toLeftOf="parent"

(5) सापेक्ष लेआउट:

android:layout_alignParentStart="true"

(5) बाधा लेआउट समतुल्य:

app:layout_constraintStart_toStartOf="parent"

(6) सापेक्ष लेआउट:

android:layout_alignParentRight="true"

(6) बाधा लेआउट समतुल्य:

app:layout_constraintRight_toRightOf="parent"

(7) सापेक्ष लेआउट:

android:layout_alignParentEnd="true"    

(7) बाधा लेआउट समतुल्य:

app:layout_constraintEnd_toEndOf="parent"

(8) सापेक्ष लेआउट:

android:layout_alignParentTop="true"

(8) बाधा लेआउट समतुल्य:

app:layout_constraintTop_toTopOf="parent"

(9) सापेक्ष लेआउट:

android:layout_alignParentBottom="true" 

(9) बाधा लेआउट समतुल्य:

app:layout_constraintBottom_toBottomOf="parent"

(10) सापेक्ष लेआउट:

android:layout_alignStart="@id/view"

(10) बाधा लेआउट समतुल्य:

app:layout_constraintStart_toStartOf="@id/view"

(११) सापेक्ष लेआउट:

android:layout_alignLeft="@id/view" 

(११) बाधा लेआउट समतुल्य:

app:layout_constraintLeft_toLeftOf="@id/view"

(12) सापेक्ष लेआउट:

android:layout_alignEnd="@id/view"  

(12) बाधा लेआउट समतुल्य:

app:layout_constraintEnd_toEndOf="@id/view"

(13) सापेक्ष लेआउट:

android:layout_alignRight="@id/view"

(13) बाधा लेआउट समतुल्य:

app:layout_constraintRight_toRightOf="@id/view"

(14) सापेक्ष लेआउट:

android:layout_alignTop="@id/view"  

(14) बाधा लेआउट समतुल्य:

app:layout_constraintTop_toTopOf="@id/view"

(15) सापेक्ष लेआउट:

android:layout_alignBaseline="@id/view" 

(15) बाधा लेआउट समतुल्य:

app:layout_constraintBaseline_toBaselineOf="@id/view"

(16) सापेक्ष लेआउट:

android:layout_alignBottom="@id/view"

(16) बाधा लेआउट समतुल्य:

app:layout_constraintBottom_toBottomOf="@id/view"

(१ Layout) सापेक्ष लेआउट:

android:layout_toStartOf="@id/view"

(17) बाधा लेआउट समतुल्य:

app:layout_constraintEnd_toStartOf="@id/view"

(18) सापेक्ष लेआउट:

android:layout_toLeftOf="@id/view"  

(18) बाधा लेआउट समतुल्य:

app:layout_constraintRight_toLeftOf="@id/view"

(19) सापेक्ष लेआउट:

android:layout_toEndOf="@id/view"

(19) बाधा लेआउट समतुल्य:

app:layout_constraintStart_toEndOf="@id/view"

(20) सापेक्ष लेआउट:

android:layout_toRightOf="@id/view"

(20) बाधा लेआउट समतुल्य:

app:layout_constraintLeft_toRightOf="@id/view"

(२१) सापेक्ष लेआउट:

android:layout_above="@id/view" 

(२१) बाधा लेआउट समतुल्य:

app:layout_constraintBottom_toTopOf="@id/view"

(२२) सापेक्ष लेआउट:

android:layout_below="@id/view" 

(२२) बाधा लेआउट समतुल्य:

app:layout_constraintTop_toBottomOf="@id/view"

@Davidpbr ConstraintLayout प्रदर्शन द्वारा रिपोर्ट किया गया

मैंने दो समान 7-चाइल्ड लेआउट बनाए, जिनमें से प्रत्येक में एक पेरेंट ConstraintLayout और RelativeLayout । एंड्रॉइड स्टूडियो विधि अनुरेखण उपकरण के आधार पर, ऐसा प्रतीत होता है कि कांस्ट्रेनल लयआउट ऑनमार्ट में अधिक समय बिताता है और ऑनफिनिशफ्लैट में अतिरिक्त कार्य करता है।

लाइब्रेरी का उपयोग किया गया ( appcompat-v7 support-v4 , appcompat-v7 …):

com.android.support.constraint:constraint-layout:1.0.0-alpha1

डिवाइस / एंड्रॉइड वर्जन पर पुन: पेश किया गया: सैमसंग गैलेक्सी एस 6 (एसएम-जी 9 20 ए। क्षमा करें, कोई नेक्सस एटीएम)। Android 5.0.2

त्वरित विधि अनुरेखण तुलना:

नमूना गितुब रेपो: https://github.com/OnlyInAmerica/ConstraintLayoutPerf





android-constraintlayout