आधार रेखा की स्थापना कैसे करता है?


218

मैं अभी xml में कुछ UI बना रहा था, और लिंट ने मुझे एक चेतावनी दी और कहा कि एंड्रॉइड सेट करें: ListView में प्रदर्शन में सुधार करने के लिए आधारभूत।

इस चेतावनी में कहा गया है कि लिंट परिवर्तनों के लिए डॉक्स

लेआउट प्रदर्शन: ऐसे वीनर के साथ रेखीयआउट्स ढूँढता है जहाँ आपको Android सेट करना चाहिए: बेहतर प्रदर्शन के लिए baselineAligned = "false", और उन मामलों को भी ढूँढता है जहाँ आपके पास नेस्टेड वेट हैं जो प्रदर्शन समस्याओं का कारण बन सकते हैं।

क्या कोई समझा सकता है कि यह प्रदर्शन में सुधार क्यों करता है, खासकर जब वजन शामिल होता है?

जवाबों:


165

सेटिंग के द्वारा android:baselineAligned="false", आप अपने बच्चों के बेसलाइन संरेखित करने के लिए आपके ऐप के लेआउट को अतिरिक्त काम करने से रोक रहे हैं; जो स्पष्ट रूप से प्रदर्शन को बढ़ा सकता है। (UI पर कम अनावश्यक कार्य => बेहतर प्रदर्शन)


20
वह हिस्सा स्पष्ट है। मैं जो पाने की कोशिश कर रहा था वह यह है कि केवल एक प्रदर्शन में सुधार क्यों होता है जब वजन शामिल होता है?
क्रिस्टोफर पेरी

185
आधार रेखा क्या है?
मैट

48
बेसलाइन शब्द टाइपोग्राफी से आया है। यह पाठ पर अदृश्य पंक्ति के अक्षर हैं। en.wikipedia.org/wiki/Baseline_%28typography%29
Zsolt Safrany

12
इसलिए यदि यह एक प्रदर्शन में सुधार है, तो इसका मतलब है कि काम जो सामान्य रूप से किया जाता है वह अब नहीं किया जा रहा है। इसके दुष्परिणाम क्या हैं? क्या अब जो काम हम टाल रहे हैं, वह अलग-अलग परिणाम देने की क्षमता रखता है?
लूनाथ

30
दस्तावेज के अनुसार @ ललनाथ, डिफ़ॉल्ट सही पर सेट है । यह किसी भी UI पाठ की आधार रेखा को मजबूर करता है ताकि वह प्रत्येक अभिभावक के साथ खुद को संरेखित कर सके। उदाहरण के लिए बटनों के बारे में सोचें, आपको एक ही लाइन पर समान चौड़ाई / ऊँचाई वाले दो बटन पसंद हैं, लेकिन उनमें से एक में एक लंबा पाठ है, क्योंकि baselineAlined="true", अधिक पाठ वाला बटन अन्य बटन के साथ पाठ को संरेखित करने के लिए चारों ओर घूम सकता है। एक बेहतर उदाहरण के लिए, इस पोस्ट को देखें
Nima G

20

कैसे android:baselineAligned="false" मदद करते हैं। यह उत्तर नहीं हो सकता है लेकिन अवधारणा प्राप्त करने में मदद करता है।

मैं अभी 3 आइटम (आइकन, टेक्स्ट, बटन) प्राप्त करने में कामयाब रहा हूं जो क्षैतिज रैखिक रेखा में लंबवत केंद्रित हैं।

यह सरल लग सकता है, लेकिन वास्तव में Android निर्दिष्ट कर रहा है: गुरुत्वाकर्षण = "center_vertical" के रूप में LinearLayout विशेषता पर्याप्त नहीं है - आइकन केंद्रित है, लेकिन पाठ और बटन नहीं हैं। ऐसा इसलिए है क्योंकि (संभवतः) पाठ में एक आधार रेखा है, और केंद्रित एल्गोरिथ्म इसका उपयोग 'वास्तविक' ऊर्ध्वाधर केंद्र के बजाय करता है। लेकिन क्या बदतर है - बटन (जो पाठ के बगल में आता है) पाठ की आधार रेखा का उपयोग करके केंद्रित है!

एंड्रॉइड निर्दिष्ट करना: LinearLayout में baselineAligned = "false" इसे बंद कर देता है, और सब कुछ सही ढंग से केंद्र करता है।


15
// Baseline alignment requires to measure widgets to obtain the
                // baseline offset (in particular for TextViews). The following
                // defeats the optimization mentioned above. Allow the child to
                // use as much space as it wants because we can shrink things
                // later (and re-measure).
                if (baselineAligned) {
                    final int freeSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
                    child.measure(freeSpec, freeSpec);
                }

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/LinearLayout.java#L1093

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