इस पेज पर बताया गया है कि पैराग्राफ़ के लिए टेक्स्ट को स्टाइल कैसे दिया जा सकता है. पैराग्राफ़-लेवल की स्टाइल सेट करने के लिए, textAlign
और lineHeight
जैसे पैरामीटर कॉन्फ़िगर किए जा सकते हैं या अपना ParagraphStyle
तय किया जा सकता है.
टेक्स्ट अलाइनमेंट सेट करना
textAlign
पैरामीटर की मदद से, Text
कॉम्पोज़ेबल प्लैटफ़ॉर्म के किसी हिस्से में टेक्स्ट का हॉरिज़ॉन्टल अलाइनमेंट सेट किया जा सकता है.
डिफ़ॉल्ट रूप से, Text
कॉन्टेंट की वैल्यू के आधार पर, टेक्स्ट के लिए नेचुरल अलाइनमेंट चुनेगा:
- लैटिन, सिरिलिक या हंगुल जैसी बाएं से दाएं लिखी जाने वाली भाषाओं के लिए,
Text
कंटेनर का बायां किनारा - अरबी या हिब्रू जैसी दाईं से बाईं ओर लिखी जाने वाली भाषाओं के लिए,
Text
कंटेनर का दाईं ओर का किनारा
@Composable fun CenterText() { Text( "Hello World", textAlign = TextAlign.Center, modifier = Modifier.width(150.dp) ) }
अगर आपको Text
कॉम्पोज़ेबल के टेक्स्ट अलाइनमेंट को मैन्युअल तरीके से सेट करना है, तो TextAlign.Left
और TextAlign.Right
के बजाय, TextAlign.Start
और TextAlign.End
का इस्तेमाल करें. ऐसा इसलिए, क्योंकि ये Text
कॉम्पोज़ेबल के दाएं किनारे पर दिखते हैं. यह टेक्स्ट के ओरिएंटेशन पर निर्भर करता है कि वह किस भाषा में है. उदाहरण के लिए,
TextAlign.End
, फ़्रेंच टेक्स्ट के लिए दाईं ओर और अरबी टेक्स्ट के लिए बाईं ओर अलाइन होता है. हालांकि, TextAlign.Right
किसी भी वर्णमाला का इस्तेमाल करने पर दाईं ओर अलाइन होता है.
पैराग्राफ़ में कई स्टाइल जोड़ना
किसी पैराग्राफ़ में कई स्टाइल जोड़ने के लिए, AnnotatedString
में ParagraphStyle
का इस्तेमाल किया जा सकता है. इसमें अपनी पसंद के मुताबिक एनोटेशन की स्टाइल का इस्तेमाल किया जा सकता है.
जब आपके टेक्स्ट के किसी हिस्से को ParagraphStyle
से मार्क किया जाता है, तो उस हिस्से को बाकी टेक्स्ट से अलग कर दिया जाता है. ऐसा लगता है कि उस हिस्से की शुरुआत और आखिर में लाइन फ़ीड हैं.
किसी टेक्स्ट में एक से ज़्यादा स्टाइल जोड़ने के बारे में ज़्यादा जानने के लिए, टेक्स्ट में एक से ज़्यादा स्टाइल जोड़ना लेख पढ़ें.
AnnotatedString
में टाइप-सेफ़ बिल्डर होता है, ताकि ये आसानी से बनाए जा सकें: buildAnnotatedString
. नीचे दिया गया स्निपेट, ParagraphStyle
सेट करने के लिए
buildAnnotatedString
का इस्तेमाल करता है:
@Composable fun ParagraphStyle() { Text( buildAnnotatedString { withStyle(style = ParagraphStyle(lineHeight = 30.sp)) { withStyle(style = SpanStyle(color = Color.Blue)) { append("Hello\n") } withStyle( style = SpanStyle( fontWeight = FontWeight.Bold, color = Color.Red ) ) { append("World\n") } append("Compose") } } ) }
लाइन की ऊंचाई और पैडिंग अडजस्ट करना
includeFontPadding
एक लेगसी प्रॉपर्टी है. यह टेक्स्ट की पहली लाइन के सबसे ऊपर और आखिरी लाइन के सबसे नीचे, फ़ॉन्ट मेट्रिक के आधार पर अतिरिक्त पैडिंग जोड़ती है.
Compose BOM के वर्शन 2024.01.01
से, includeFontPadding
डिफ़ॉल्ट रूप से false
पर सेट होता है. इससे डिफ़ॉल्ट टेक्स्ट लेआउट, सामान्य डिज़ाइन टूल के लेआउट से ज़्यादा मिलता-जुलता हो जाता है.
lineHeight
को कॉन्फ़िगर करने की सुविधा नई नहीं है. यह Android Q के बाद से उपलब्ध है. lineHeight
पैरामीटर का इस्तेमाल करके, Text
के लिए lineHeight
को कॉन्फ़िगर किया जा सकता है. यह पैरामीटर, टेक्स्ट की हर लाइन में लाइन की ऊंचाई को बांटता है. इसके बाद, नए LineHeightStyle API
का इस्तेमाल करके, इस टेक्स्ट को स्पेस में अलाइन करने का तरीका कॉन्फ़िगर किया जा सकता है. साथ ही, स्पेस में मौजूद खाली जगह को हटाया जा सकता है.
ज़्यादा सटीक जानकारी के लिए, “sp” (स्केल किए गए पिक्सल) के बजाय टेक्स्ट यूनिट “em” (रिलेटिव फ़ॉन्ट साइज़) का इस्तेमाल करके, lineHeight
में बदलाव किया जा सकता है. सही टेक्स्ट यूनिट चुनने के बारे में ज़्यादा जानकारी के लिए, TextUnit
देखें.
Text( text = text, style = LocalTextStyle.current.merge( TextStyle( lineHeight = 2.5.em, platformStyle = PlatformTextStyle( includeFontPadding = false ), lineHeightStyle = LineHeightStyle( alignment = LineHeightStyle.Alignment.Center, trim = LineHeightStyle.Trim.None ) ) ) )
lineHeight
में बदलाव करने के अलावा, अब LineHeightStyle
एक्सपेरिमेंटल एपीआई: LineHeightStyle.Alignment
और LineHeightStyle.Trim
के साथ कॉन्फ़िगरेशन का इस्तेमाल करके, टेक्स्ट को और भी बीच में रखा जा सकता है और उसका स्टाइल तय किया जा सकता है. ट्रिम करने की सुविधा के काम करने के लिए, includeFontPadding
को false
पर सेट करना ज़रूरी है. अलाइनमेंट और ट्रिम, टेक्स्ट की लाइनों के बीच के मेज़र किए गए स्पेस का इस्तेमाल करके, उसे सभी लाइनों में बेहतर तरीके से बांटते हैं. इनमें टेक्स्ट की एक लाइन और टेक्स्ट के ब्लॉक की सबसे ऊपर वाली लाइन भी शामिल है.
LineHeightStyle.Alignment
से यह तय होता है कि लाइन की ऊंचाई से मिले स्पेस में लाइन को कैसे अलाइन किया जाए. हर लाइन में, टेक्स्ट को ऊपर, नीचे, बीच में या अनुपात के हिसाब से अलाइन किया जा सकता है. इसके बाद, LineHeightStyle.Trim
की मदद से, टेक्स्ट की पहली लाइन के सबसे ऊपर और आखिरी लाइन के सबसे नीचे मौजूद अतिरिक्त स्पेस को हटाया या छोड़ा जा सकता है. यह स्पेस, lineHeight
और अलाइनमेंट में किए गए बदलावों की वजह से जनरेट होता है. यहां दिए गए सैंपल से पता चलता है कि अलाइनमेंट को बीच में (LineHeightStyle.Alignment.Center
) रखते समय, अलग-अलग LineHeightStyle.Trim
कॉन्फ़िगरेशन के साथ, कई लाइन वाला टेक्स्ट कैसा दिखता है.
LineHeightStyle.Trim.None |
LineHeightStyle.Trim.Both |
LineHeightStyle.Trim.FirstLineTop |
LineHeightStyle.Trim.LastLineBottom |
इस बदलाव के बारे में ज़्यादा जानने के लिए, कॉम्पोज़ टेक्स्ट में फ़ॉन्ट पैडिंग ठीक करना ब्लॉग पोस्ट देखें. इसमें यह भी बताया गया है कि View सिस्टम में includeFontPadding
कैसे काम करता है. साथ ही, इसमें Compose और नए LineHeightStyle
एपीआई के लिए किए गए बदलावों के बारे में भी बताया गया है.
लाइन ब्रेक डालना
LineBreak
एपीआई, टेक्स्ट को कई लाइनों में बांटने की शर्तों को तय करता है. आपके पास यह तय करने का विकल्प होता है कि आपको Text
कॉम्पोज़ेबल के TextStyle
ब्लॉक में, लाइन ब्रेकिंग किस तरह की चाहिए. लाइन ब्रेक करने के लिए पहले से तय किए गए टाइप में ये शामिल हैं:
Simple
— तेज़ और बुनियादी लाइन ब्रेकिंग. टेक्स्ट इनपुट फ़ील्ड के लिए सुझाया गया.Heading
— लाइन ब्रेक करने के लिए, ज़्यादा ढील वाले नियमों का इस्तेमाल किया जाता है. इसका सुझाव छोटे टेक्स्ट के लिए दिया जाता है, जैसे कि टाइटल.Paragraph
— पढ़ने में आसान बनाने के लिए, धीमी और बेहतर क्वालिटी वाली लाइन ब्रेकिंग. इसका सुझाव, पैराग्राफ़ जैसे ज़्यादा टेक्स्ट के लिए दिया जाता है.
नीचे दिया गया स्निपेट, टेक्स्ट के लंबे ब्लॉक में लाइन-ब्रेक करने के व्यवहार की जानकारी देने के लिए, Simple
और Paragraph
, दोनों का इस्तेमाल करता है:
TextSample( samples = mapOf( "Simple" to { Text( text = SAMPLE_LONG_TEXT, modifier = Modifier .width(130.dp) .border(BorderStroke(1.dp, Color.Gray)), fontSize = 14.sp, style = TextStyle.Default.copy( lineBreak = LineBreak.Simple ) ) }, "Paragraph" to { Text( text = SAMPLE_LONG_TEXT, modifier = Modifier .width(130.dp) .border(BorderStroke(1.dp, Color.Gray)), fontSize = 14.sp, style = TextStyle.Default.copy( lineBreak = LineBreak.Paragraph ) ) } ) )
ऊपर दिए गए आउटपुट में, ध्यान दें कि Paragraph
लाइन ब्रेक करने की सुविधा, Simple
लाइन ब्रेक करने की सुविधा के मुकाबले, विज़ुअल तौर पर ज़्यादा संतुलित नतीजा देती है.
लाइन ब्रेक को पसंद के मुताबिक बनाना
Strategy
पैरामीटर की मदद से, अपना LineBreak
कॉन्फ़िगरेशन भी बनाया जा सकता है. Strategy
इनमें से कोई भी हो सकता है:
Balanced
— टेक्स्ट की लाइनों की लंबाई को बराबर करने की कोशिश करता है. साथ ही, चालू होने पर अपने-आप हाइफ़न लगाता है. स्मार्टवॉच जैसी छोटी स्क्रीन पर, ज़्यादा से ज़्यादा टेक्स्ट दिखाने के लिए इसका सुझाव दिया जाता है.HighQuality
— इस विकल्प की मदद से, पैराग्राफ़ को पढ़ने लायक बनाया जा सकता है. साथ ही, अगर यह विकल्प चालू है, तो इसमें हाइफ़न भी जोड़ा जा सकता है. (Balanced
याSimple
के अलावा, बाकी सभी चीज़ों के लिए डिफ़ॉल्ट तौर पर सेट होना चाहिए.)Simple
— बुनियादी और तेज़ रणनीति. इस विकल्प के चालू होने पर, सिर्फ़ उन शब्दों के लिए हाइफ़न का इस्तेमाल किया जाता है जो पूरी लाइन में नहीं आते. टाइप करते समय, कर्सर की जगह बदलने से बचने के लिए, टेक्स्ट में बदलाव करने के लिए फ़ायदेमंद है.
नीचे दिए गए स्निपेट में, डिफ़ॉल्ट सेटिंग वाले पैराग्राफ़ और Balanced
लाइन-ब्रेकिंग की रणनीति के साथ, छोटी स्क्रीन के लिए ऑप्टिमाइज़ किए गए पैराग्राफ़ के बीच का अंतर दिखाया गया है:
TextSample( samples = mapOf( "Balanced" to { val smallScreenAdaptedParagraph = LineBreak.Paragraph.copy(strategy = LineBreak.Strategy.Balanced) Text( text = SAMPLE_LONG_TEXT, modifier = Modifier .width(200.dp) .border(BorderStroke(1.dp, Color.Gray)), fontSize = 14.sp, style = TextStyle.Default.copy( lineBreak = smallScreenAdaptedParagraph ) ) }, "Default" to { Text( text = SAMPLE_LONG_TEXT, modifier = Modifier .width(200.dp) .border(BorderStroke(1.dp, Color.Gray)), fontSize = 14.sp, style = TextStyle.Default ) } ) )
सीजेके के लिए ध्यान देने वाली बातें
Strictness
और
WordBreak
एपीआई की मदद से भी LineBreak
को पसंद के मुताबिक बनाया जा सकता है. इन्हें खास तौर पर CJK भाषाओं के लिए डिज़ाइन किया गया है.
ऐसा हो सकता है कि आपको इन एपीआई का असर, सीजेके भाषाओं के अलावा अन्य भाषाओं में हमेशा न दिखे. कुल मिलाकर, लाइन-ब्रेक करने के नियम, जगह-भाषा के हिसाब से तय किए जाते हैं.
Strictness
, इन प्रॉपर्टी की मदद से लाइन ब्रेकिंग की सख्ती के बारे में बताता है:
Default
— स्थानीय भाषा के लिए, डिफ़ॉल्ट रूप से ब्रेकिंग रूल. यहNormal
याStrict
से मेल खा सकता है.Loose
— सबसे कम पाबंदी वाले नियम. छोटी लाइनों के लिए सही है.Normal
— लाइन ब्रेक करने के सबसे सामान्य नियम.Strict
— लाइन ब्रेक करने के लिए सबसे सख्त नियम.
WordBreak
से यह तय होता है कि शब्दों के बीच लाइन ब्रेक कैसे डाले जाएं. इसके लिए, ये प्रॉपर्टी इस्तेमाल की जाती हैं:
Default
— स्थानीय भाषा के लिए, डिफ़ॉल्ट रूप से ब्रेकिंग रूल.Phrase
— लाइन ब्रेक, वाक्यांशों के आधार पर होता है.
यहां दिए गए स्निपेट में, जैपनीज़ टेक्स्ट के लिए Strict
सख्त और Phrase
शब्द के बीच के अंतर की सेटिंग का इस्तेमाल किया गया है:
val customTitleLineBreak = LineBreak( strategy = LineBreak.Strategy.HighQuality, strictness = LineBreak.Strictness.Strict, wordBreak = LineBreak.WordBreak.Phrase ) Text( text = "あなたに寄り添う最先端のテクノロジー。", modifier = Modifier.width(250.dp), fontSize = 14.sp, style = TextStyle.Default.copy( lineBreak = customTitleLineBreak ) )
अलग-अलग लाइनों में बंटे टेक्स्ट में हाइफ़न लगाना
Hyphens
एपीआई की मदद से, अपने ऐप्लिकेशन में हाइफ़न की सुविधा जोड़ी जा सकती है.
हाइफ़न का मतलब है, डैश जैसे विराम चिह्न को डालना, ताकि यह पता चल सके कि किसी शब्द को टेक्स्ट की लाइनों में बांटा गया है. इस सुविधा के चालू होने पर, किसी शब्द के हर सिलेबल के बीच में हाइफ़न जोड़ दिया जाता है.
डिफ़ॉल्ट रूप से, हाइफ़न लगाने की सुविधा चालू नहीं होती. हाइफ़न जोड़ने की सुविधा चालू करने के लिए, TextStyle
ब्लॉक में पैरामीटर के तौर पर Hyphens.Auto
जोड़ें:
TextSample( samples = mapOf( "Hyphens - None" to { Text( text = SAMPLE_LONG_TEXT, modifier = Modifier .width(130.dp) .border(BorderStroke(1.dp, Color.Gray)), fontSize = 14.sp, style = TextStyle.Default.copy( lineBreak = LineBreak.Paragraph, hyphens = Hyphens.None ) ) }, "Hyphens - Auto" to { Text( text = SAMPLE_LONG_TEXT, modifier = Modifier .width(130.dp) .border(BorderStroke(1.dp, Color.Gray)), fontSize = 14.sp, style = TextStyle.Default.copy( lineBreak = LineBreak.Paragraph, hyphens = Hyphens.Auto ) ) } ) )
यह सुविधा चालू होने पर, हाइफ़न सिर्फ़ इन स्थितियों में लगाए जाते हैं:
- कोई शब्द लाइन में नहीं आता. अगर
Simple
लाइन ब्रेक करने की रणनीति का इस्तेमाल किया जाता है, तो किसी शब्द को हाइफ़न करने की सुविधा सिर्फ़ तब मिलती है, जब लाइन किसी एक शब्द से छोटी हो. - आपके डिवाइस पर सही स्थानीय भाषा सेट होती है, क्योंकि सही हाइफ़नेशन तय करने के लिए, सिस्टम में मौजूद डिक्शनरी का इस्तेमाल किया जाता है.
आपके लिए सुझाव
- ध्यान दें: JavaScript बंद होने पर लिंक टेक्स्ट दिखता है
- टेक्स्ट को स्टाइल देना
- लेआउट बनाने की बुनियादी बातें
- Compose लेआउट में इनट्रिन्सिक मेज़रमेंट