Android के FontMetrics में शीर्ष, चढ़ाई, आधार रेखा, वंश, नीचे और अग्रणी का अर्थ है


90

यह एक बुनियादी सवाल की तरह लगता है, लेकिन मुझे एसओ पर एक समान नहीं मिला। प्रलेखन पढ़ते समय , मुझे अवधारणाओं को समझने में परेशानी हो रही थी। मैं समझता हूँ कि क्या अंतर के बीच है चाहते हैं topऔर ascentऔर यह भी bottomऔर descent। और वास्तव में आधार रेखा कहां है? क्या आपके पास इसकी कल्पना करने में मेरी मदद करने के लिए एक आरेख है?

जवाबों:


286

आइए पहले समीक्षा करें कि दस्तावेज़ क्या कहता है :

  • शीर्ष - किसी दिए गए पाठ आकार में फ़ॉन्ट में सबसे लंबे ग्लिफ़ के लिए आधार रेखा के ऊपर की अधिकतम दूरी।
  • एसेंट - एकल स्पेल्ड टेक्स्ट के लिए बेसलाइन के ऊपर अनुशंसित दूरी।
  • उतर - एकल स्थानिक पाठ के लिए आधार रेखा के नीचे अनुशंसित दूरी।
  • निचला - किसी दिए गए पाठ आकार में फ़ॉन्ट में सबसे कम ग्लिफ़ के लिए आधार रेखा के नीचे की अधिकतम दूरी।
  • अग्रणी - पाठ की पंक्तियों के बीच जोड़ने के लिए अनुशंसित अतिरिक्त स्थान।

ध्यान दें कि बेसलाइन वह है जिसे पहले चार से मापा जाता है। यह वह रेखा है, जो आधार बनाती है, जिस पर पाठ बैठता है, भले ही कुछ अक्षर (जैसे जी, वाई, जे, आदि) के कुछ हिस्से हो सकते हैं जो लाइन के नीचे जाते हैं। यह पंक्तिबद्ध नोटबुक में आपके द्वारा लिखी गई लाइनों के बराबर है।

इन चीजों की कल्पना करने में मदद करने के लिए यहां एक तस्वीर है:

FontMetrics शीर्ष, चढ़ाई, आधार रेखा, सभ्य, निचला और अग्रणी दिखा रहा है

याद रखें कि जब जावा और एंड्रॉइड में एक कैनवास पर ड्राइंग किया जाता है, तो नीचे जाना y में वृद्धि है और ऊपर जाना y में कमी है। इसका मतलब है कि फॉन्टमेट्रिक्स ' topऔर ascentनकारात्मक संख्याएं हैं क्योंकि उन्हें आधार रेखा से मापा जाता है (जबकि नीचे और नीचे सकारात्मक संख्या होती है)। इस प्रकार, से दूरी प्राप्त करने के लिए topकरने के लिए bottom(तुम क्या करने की आवश्यकता होगी bottom- top)।

अग्रणी एक लाइन के नीचे और अगली पंक्ति के शीर्ष के बीच की दूरी है। ऊपर दी गई तस्वीर में, यह लाइन 1 के नारंगी और लाइन 2 के बैंगनी के बीच का स्थान है। जैसा कि @MajorTom ने नीचे लिखा है , टाइपोग्राफी में यह शब्द "सही प्रकार की आधारभूत रेखाओं के आधार के बीच की दूरी" के रूप में अधिक ठीक से परिभाषित किया गया है। * हालांकि, एंड्रॉइड शब्द का उपयोग अधिक ऐतिहासिक अर्थों में किया गया है। शब्द (उच्चारण "लैडिंग") लीड स्ट्रिप से आता है जो पुराने टाइपसेटर्स टाइप की लाइनों के बीच डालते थे। यह मूल रूप से लाइन रिक्ति को समायोजित करने का एक तरीका था। एंड्रॉइड में मैंने वास्तव में कभी भी अग्रणी को इसके अलावा और कुछ नहीं देखा है0और मैंने इसे स्रोत कोड में किसी भी चीज़ के लिए उपयोग नहीं किया है। (सही मुझे यदि आप जानते हैं, जहां यह calculate कुछ भी करने के लिए प्रयोग किया जाता है।) आप एक में पंक्ति रिक्ति को बदल सकते हैं TextViewके साथ setLineSpacingकोड या में android:lineSpacingExtraऔर android:lineSpacingMultiplierएक्सएमएल में। हालाँकि, ये विधियाँ अग्रणी का उपयोग नहीं करती हैं या संशोधित नहीं करती हैं।

अधिक जानकारी के लिए ये लिंक देखें:

और ज्यादा खोजें

फ़ॉन्ट मेट्रिक्स का अधिक पता लगाने के लिए, मैंने एक सरल परियोजना बनाई।

यहाँ छवि विवरण दर्ज करें

यहां सभी कोड सूचीबद्ध करने के बजाय। मैंने प्रोजेक्ट को GitHub में जोड़ा । आप या तो प्रोजेक्ट को क्लोन कर सकते हैं, या निम्न फ़ाइलों को एक नए प्रोजेक्ट में कॉपी कर सकते हैं।

क्या पत्र कभी ऊपर topया नीचे जाते हैं bottom?

आमतौर पर नहीं, लेकिन वे कर सकते थे। ऊपर और नीचे, जैसा कि मैं उन्हें समझता हूं, फ़ॉन्ट द्वारा निर्धारित किया जाता है (इसलिए "FontMetrics"), इसलिए एक फ़ॉन्ट निर्माता एक ग्लिफ़ को ऊपर जाने की तुलना में उच्चतर बना सकता है जो वे कहते हैं कि (या नीचे से कम है)। इसके अलावा, यूनिकोड में diacritical मार्क्स के संयोजन के साथ यह बहुत आसानी से हो सकता है। यहाँ एक अतिवादी उदाहरण है ( यहाँ से लिया गया है)): M̵ͯͪ̿̿̂̄ͫ̃҉͏͎̣̹̱̜͉̦̞̪̘̠̝̝͍̼̜̖̥̭͟a :y̵̴̢͕̝̩̱͈͕̼̣͕̟̌͗̾ͤ̎͌̄ͣͨ͊ͬb̡̯̰̪̜͙̟̝̠͚̜̥̙̤̃ͨ̋̒̒̊ͧͤ͐̓͋̌̾̇̔̈́̀́͡͠e̵̳̙͔̟̱͕̓̀̄̉̅ͧ̋͊͌͑́͌ͪ̒̿̀̚ ̛͋̏̍̆ͤ͛͐ͨ̌̋ͤ̎̂ͨ̂̓̑̚̕͟͏̻̣͖̖͚͚͓̲̼̪ȁ̔̅̿͐̑͡͏̝͓̮͚̘̦̰͚͎͔͉͚̮̠̕͜ͅṱ̱̼̖̓̂ͭ̏̅͂ͥ͌ͯ͌͠hͪ̓ͪ̄̌̓ͧ͋͐ͬ̅̑҉̨̪̬͎͍̥̬s̡̮̳͙͓͔̹̘̹͓̘̻̦̣͎̫̐ͤ̐͛́͝? ̧̦̼̘͕̪̠̙͖̦̯̦̘͉͈͕͔̘̻̲͑ͨ̊̈́̐ͫ͐̌ͯ̀͘͝Ḩ̷̸̸̹͉̩̜̹̞ͯ̃̃ͧͬͨ̌̀̾̐̈̇ͧ͛̃͐̀ͦ͞ ̵̳̙͔̟̱͕̓̀̄̉̅ͧ̋͊͌͑́͌ͪ̒̿̀̚A̴̦̗̬̠͙̭͉̟̺͇̭̰͔͕̯̅̃͋ͪ̈́̉̓̌ͯ̈́͆̋̀ͤ̇̂̿̈́̂͡͡Ṱ̲͎͉̣̳̺̱̜̦̬͕̣͉͇͊̌ͥ͐͒̈́̓́ͥ́́̋͂̅ͬ̆͗ͥ̕͢͡S̍ͧ͗̒͗̂̈ͬ͊̚̚͢͏̗̣̳ͅ ͔̟̝͔ͥ̈́̏ͮͯ̇͆̊̒ͦͦ͘͢͜ !!!

एंड्रॉइड में उस स्ट्रिंग को प्लग करना हमें मिलता है:

यहाँ छवि विवरण दर्ज करें

topनीचे और नीचे के ऊपर विशेषांक मिलते हैं bottom। यह ध्यान रखना दिलचस्प है कि कुल चौड़ाई और ऊंचाई को सही ढंग से पाठ सीमा द्वारा मापा जाता है, हालांकि।

वैसे भी, आपके प्रोग्रामिंग में सभी व्यावहारिक उद्देश्यों के लिए, आप बस मान सकते हैं कि ग्लिफ़ अक्षरों के लिए अधिकतम और न्यूनतम हैं topऔर bottom। और आम तौर पर वे अंदर रहना होगा ascentऔर decent। यदि आपको जिस भी कारण से जानने की आवश्यकता है, यदि पत्र उससे परे हैं topया bottomआप उपयोग कर सकते हैं TextPaint.getTextBounds


अच्छा! क्या आप जानते हैं कि किन इकाइयों में एसेंट, डिसेंट आदि को मापा जाता है? क्या वे पिक्सेल में हैं? वे फ्लोट मान हैं, लेकिन यह सुनिश्चित नहीं है कि वे स्क्रीन के अनुरूप कैसे हैं। फोटोशॉप में उन्हें चेक किया गया कि यह पिक्सेल है या नहीं और कुछ इकाइयों में थोड़ा अंतर है; पिक्सल छोटा होना।
विक्रम गुप्ता

@VikramGupta। इकाइयाँ पिक्सेल हैं। मुझे यकीन नहीं है कि आपके फ़ोटोशॉप इमेज चेक से क्या अंतर हुआ।
सर्ग

उपयोगी स्पष्टीकरण और एप्लिकेशन के लिए धन्यवाद। लेकिन, क्या आप आगे बता सकते हैं कि वास्तव में क्या है Top? क्या Topलाइन को छूने के लिए कोई अक्षर लंबा होगा ? उदाहरण के लिए, "M", "l" सबसे लंबा अक्षर लगता है। उनमें से कोई भी स्पर्श नहीं करता है Top
चोक यान चेंग

@CheokYanCheng, मेरे जवाब के अंत में अपडेट देखें।
सुरगाछ

@Suragch जानकारी के लिए धन्यवाद। अधिक समझने के लिए मैं आपके ऐप का उपयोग करता हूं। मुझे उम्मीद है कि "एसेंट" लाइन केवल आपके स्क्रीनशॉट में फॉन्ट के शीर्ष को अच्छी तरह से स्पर्श करेगी। हालांकि, नवीनतम i.imgur.com/aRxgjvu.png से , यह सबसे ऊंचे चरित्र "ए" को नहीं छू रहा है। क्या आपके पास कोई विचार है क्यों?
चोक यान चेंग

5

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

टाइपोग्राफी में, अग्रणी / ˈlɛdography / प्रकार के आधारभूत रेखाओं के बीच की दूरी को संदर्भित करता है। यह शब्द हाथ से टाइप करने के दिनों में उत्पन्न हुआ था, जब लीड की पतली स्ट्रिप्स को टाइप की लाइनों के बीच ऊर्ध्वाधर दूरी बढ़ाने के लिए रूपों में डाला गया था।

जो मैं बता सकता हूं, उससे एंड्रॉइड के पास इसे निर्दिष्ट करने का कोई तरीका नहीं है।


मुझे बेहतर समझने में मदद करने के लिए +1। जहां तक प्रमुख को बदलने चला जाता है, आप TextView के लिए उपयोग कर सकते setLineSpacingकोड में या android:lineSpacingExtraऔर android:lineSpacingMultiplierएक्सएमएल में।
०१:१२ बजे सुरग

धन्यवाद - हाँ, हमें यह बताया गया था कि हम लाइनों के बीचandroid:lineSpacingExtra वास्तविक स्थान के बीच एक माप डालेंगे। यह अग्रणी नहीं है, लेकिन ऐसा लगता है कि रिक्ति को प्रबंधित करने का एकमात्र तरीका है। यह एक समस्या है क्योंकि टाइपोग्राफी में ऐसा कोई माप नहीं है, और स्केच या जेपेलिन (हमारे द्वारा उपयोग किए जाने वाले उपकरण) में उस माप को निर्दिष्ट करने का ऐसा कोई तरीका नहीं है। इसके अलावा यह अग्रणी से मेल नहीं खाता।
मेजरटॉम

1
यदि टाइपोग्राफिक लीडिंग बेसलाइनों के बीच की दूरी है, तो ऐसा लगता है कि गणना करना आसान होना चाहिए।
सुरगछ

बिल्कुल यही मैने सोचा। क्या इसे प्रोग्रामेटिक रूप से करने का कोई तरीका है? मैं उन तरीकों से उम्मीद कर रहा था जो एंड्रॉइड प्रदान करता है कि ऐसा करने का एक तरीका हो सकता है। जिन देवों के साथ हम काम करते हैं, वे मालूम नहीं हैं।
मेजरटॉम

मुझे इसके साथ काम करते हुए कुछ समय हो गया है, लेकिन अगर मैं इसे फिर से लेने जा रहा हूं तो मैं यहां और यहां शुरू करूंगा और विभिन्न पाठ और फोंट के साथ प्रयोग करूंगा । यहां तक ​​कि अगर यह सीधे आगे नहीं है, तो मुझे विश्वास नहीं हो सकता है कि आपकी जरूरत की गणना करने का कोई तरीका नहीं है।
सुरगाछ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.