टेक्स्ट की शैली

Text कंपोज़ेबल में, कॉन्टेंट को स्टाइल करने के लिए कई वैकल्पिक पैरामीटर होते हैं. यहां हमने उन पैरामीटर की सूची दी है जो टेक्स्ट के साथ इस्तेमाल के सबसे सामान्य उदाहरणों को कवर करते हैं. Text के सभी पैरामीटर के लिए, Compose Text source code देखें.

इनमें से किसी भी पैरामीटर को सेट करने पर, पूरी टेक्स्ट वैल्यू पर स्टाइल लागू होती है. अगर आपको एक ही लाइन या पैराग्राफ़ में कई स्टाइल लागू करनी हैं, तो एक ही लाइन में कई स्टाइल सेक्शन देखें.

टेक्स्ट की सामान्य स्टाइल

यहां दिए गए सेक्शन में, टेक्स्ट को स्टाइल करने के सामान्य तरीकों के बारे में बताया गया है.

टेक्स्ट का रंग बदलें

@Composable
fun BlueText() {
    Text("Hello World", color = Color.Blue)
}

ये शब्द

टेक्स्ट साइज़ बदलें

@Composable
fun BigText() {
    Text("Hello World", fontSize = 30.sp)
}

ये शब्द

टेक्स्ट को इटैलिक करना

टेक्स्ट को इटैलिक करने के लिए, fontStyle पैरामीटर का इस्तेमाल करें. इसके अलावा, कोई दूसरा FontStyle भी सेट किया जा सकता है.

@Composable
fun ItalicText() {
    Text("Hello World", fontStyle = FontStyle.Italic)
}

ये शब्द

टेक्स्ट को बोल्ड करना

टेक्स्ट को बोल्ड करने के लिए, fontWeight पैरामीटर का इस्तेमाल करें. इसके अलावा, कोई दूसरा FontWeight भी सेट किया जा सकता है.

@Composable
fun BoldText() {
    Text("Hello World", fontWeight = FontWeight.Bold)
}

ये शब्द

शैडो जोड़ें

style पैरामीटर की मदद से, TextStyle टाइप का ऑब्जेक्ट सेट किया जा सकता है. साथ ही, कई पैरामीटर कॉन्फ़िगर किए जा सकते हैं. उदाहरण के लिए, शैडो. Shadow को शैडो के लिए रंग, ऑफ़सेट या Text के हिसाब से उसकी जगह और ब्लर रेडियस मिलता है. ब्लर रेडियस से पता चलता है कि शैडो कितनी धुंधली दिखती है.

@Composable
fun TextShadow() {
    val offset = Offset(5.0f, 10.0f)
    Text(
        text = "Hello world!",
        style = TextStyle(
            fontSize = 24.sp,
            shadow = Shadow(
                color = Color.Blue, offset = offset, blurRadius = 3f
            )
        )
    )
}

ये शब्द

टेक्स्ट में एक से ज़्यादा स्टाइल जोड़ना

एक ही Text कंपोज़ेबल में अलग-अलग स्टाइल सेट करने के लिए, AnnotatedString का इस्तेमाल करें. यह एक ऐसी स्ट्रिंग होती है जिसे किसी भी एनोटेशन की स्टाइल के साथ एनोटेट किया जा सकता है.

AnnotatedString एक डेटा क्लास है, जिसमें ये शामिल हैं:

  • Text एट्रिब्यूट की वैल्यू
  • List की SpanStyleRange वैल्यू, टेक्स्ट वैल्यू में पोज़िशन रेंज के साथ इनलाइन स्टाइलिंग के बराबर होती है
  • ParagraphStyleRange का List, जिसमें टेक्स्ट अलाइनमेंट, टेक्स्ट की दिशा, लाइन की ऊंचाई, और टेक्स्ट इंडेंट स्टाइलिंग के बारे में बताया गया है

TextStyle का इस्तेमाल Text कंपोज़ेबल में किया जाता है. वहीं, SpanStyle और ParagraphStyle का इस्तेमाल AnnotatedString में किया जाता है. किसी पैराग्राफ़ में एक से ज़्यादा स्टाइल के बारे में ज़्यादा जानने के लिए, किसी पैराग्राफ़ में एक से ज़्यादा स्टाइल जोड़ना लेख पढ़ें.

AnnotatedString में टाइप-सेफ़ बिल्डर होता है, ताकि इसे आसानी से बनाया जा सके: buildAnnotatedString.

@Composable
fun MultipleStylesInText() {
    Text(
        buildAnnotatedString {
            withStyle(style = SpanStyle(color = Color.Blue)) {
                append("H")
            }
            append("ello ")

            withStyle(style = SpanStyle(fontWeight = FontWeight.Bold, color = Color.Red)) {
                append("W")
            }
            append("orld")
        }
    )
}

ये शब्द

अपने Jetpack Compose ऐप्लिकेशन में, एचटीएमएल फ़ॉर्मैट में टेक्स्ट दिखाने के लिए AnnotatedString.fromHtml() का इस्तेमाल करें. इसमें क्लिक किए जा सकने वाले लिंक भी शामिल होते हैं. यह फ़ंक्शन, एचटीएमएल टैग वाली स्ट्रिंग को AnnotatedString में बदलता है. इससे स्टाइलिंग और लिंक हैंडलिंग की जा सकती है.

उदाहरण: स्टाइल किए गए लिंक के साथ एचटीएमएल

यह स्निपेट, लिंक के साथ एचटीएमएल फ़ॉर्मैट किया गया टेक्स्ट रेंडर करता है. साथ ही, लिंक पर खास स्टाइलिंग लागू करता है:

कोड के बारे में अहम बातें
  • AnnotatedString.fromHtml(), htmlText स्ट्रिंग को AnnotatedString में बदलता है. linkStyles पैरामीटर, लिंक के दिखने के तरीके को पसंद के मुताबिक बनाता है.

  • TextLinkStyles एचटीएमएल में मौजूद लिंक के लिए स्टाइल तय करता है. SpanStyle इस कुकी का इस्तेमाल, लिंक के लिए टेक्स्ट डेकोरेशन, फ़ॉन्ट स्टाइल, और रंग सेट करने के लिए किया जाता है.

  • Text कंपोज़ेबल, नतीजे के तौर पर मिले AnnotatedString को दिखाता है.

नतीजा

इस स्निपेट में, "Jetpack Compose" को क्लिक किए जा सकने वाले लिंक के तौर पर दिखाया गया है. इसे नीले रंग में स्टाइल किया गया है, अंडरलाइन किया गया है, और इटैलिक किया गया है:

'Jetpack Compose' H1 हेडिंग के बाद, 'Jetpack Compose की मदद से बेहतर ऐप्लिकेशन बनाएँ' लिखा गया है. इसमें Jetpack Compose पर क्लिक किया जा सकता है. इसे नीले रंग, अंडरलाइन, और इटैलिक स्टाइल में लिखा गया है.
दूसरी इमेज. एक हेडिंग और पैराग्राफ़, जिसमें पैराग्राफ़ में मौजूद 'Jetpack Compose' पर क्लिक किया जा सकता है. यह एक स्टाइल किया गया लिंक है.

Brush की मदद से बेहतर स्टाइलिंग की सुविधा चालू करना

टेक्स्ट को ज़्यादा बेहतर तरीके से स्टाइल करने के लिए, Brush API का इस्तेमाल TextStyle और SpanStyle के साथ किया जा सकता है. आम तौर पर, जहां TextStyle या SpanStyle का इस्तेमाल किया जाता है वहां अब Brush का भी इस्तेमाल किया जा सकता है.

टेक्स्ट को स्टाइल करने के लिए ब्रश का इस्तेमाल करना

TextStyle में मौजूद ब्रुश का इस्तेमाल करके, टेक्स्ट को कॉन्फ़िगर करें. उदाहरण के लिए, अपने टेक्स्ट के लिए linearGradient ब्रश को इस तरह कॉन्फ़िगर किया जा सकता है:

val gradientColors = listOf(Cyan, LightBlue, Purple /*...*/)

Text(
    text = text,
    style = TextStyle(
        brush = Brush.linearGradient(
            colors = gradientColors
        )
    )
)

Brush API के `linearGradient` फ़ंक्शन का इस्तेमाल करके, रंगों की तय की गई सूची के साथ.
तीसरी इमेज. Brush API के linearGradient फ़ंक्शन का इस्तेमाल करके, रंगों की तय की गई सूची के साथ इमेज को पेंट किया गया है.

आपके पास इस खास कलर स्कीम या रंग भरने की स्टाइल को चुनने की पाबंदी नहीं है. हमने हाइलाइट करने के लिए एक आसान उदाहरण दिया है. हालांकि, अपने टेक्स्ट को बेहतर बनाने के लिए, किसी भी बिल्ट-इन ब्रश या सिर्फ़ SolidColor का इस्तेमाल करें.

इंटिग्रेशन

Brush को TextStyle और SpanStyle, दोनों के साथ इस्तेमाल किया जा सकता है. इसलिए, TextField और buildAnnotatedString के साथ इंटिग्रेशन आसानी से हो जाता है.

TextField में Brush API इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, Brush API की मदद से स्टाइल इनपुट करना लेख पढ़ें.

SpanStyle का इस्तेमाल करके अतिरिक्त स्टाइलिंग

टेक्स्ट के किसी हिस्से पर ब्रश का इस्तेमाल करना

अगर आपको अपने टेक्स्ट के सिर्फ़ कुछ हिस्सों पर ब्रश का इस्तेमाल करना है, तो buildAnnotatedString और SpanStyle एपीआई का इस्तेमाल करें. साथ ही, अपनी पसंद के ब्रश और ग्रेडिएंट का इस्तेमाल करें.

Text(
    text = buildAnnotatedString {
        append("Do not allow people to dim your shine\n")
        withStyle(
            SpanStyle(
                brush = Brush.linearGradient(
                    colors = rainbowColors
                )
            )
        ) {
            append("because they are blinded.")
        }
        append("\nTell them to put some sunglasses on.")
    }
)

टेक्स्ट के लिए, लीनियरग्रैडिएंट को स्टाइल के तौर पर इस्तेमाल करने वाले डिफ़ॉल्ट ब्रश का इस्तेमाल करना.
चौथी इमेज. Text के लिए स्टाइल के तौर पर linearGradient के साथ डिफ़ॉल्ट ब्रश का इस्तेमाल किया जा रहा है.
टेक्स्ट के किसी हिस्से की ओपैसिटी

टेक्स्ट के किसी खास हिस्से की ओपैसिटी को अडजस्ट करने के लिए, SpanStyle के ज़रूरी नहीं alpha पैरामीटर का इस्तेमाल करें. टेक्स्ट के दोनों हिस्सों के लिए एक ही ब्रश का इस्तेमाल करें. साथ ही, उससे जुड़े स्पैन में ऐल्फ़ा पैरामीटर बदलें. कोड के इस सैंपल में, टेक्स्ट का पहला स्पैन आधी अपारदर्शिता (alpha =.5f) पर दिखता है, जबकि दूसरा स्पैन पूरी अपारदर्शिता (alpha = 1f) पर दिखता है.

val brush = Brush.linearGradient(colors = rainbowColors)

buildAnnotatedString {
    withStyle(
        SpanStyle(
            brush = brush, alpha = .5f
        )
    ) {
        append("Text in ")
    }
    withStyle(
        SpanStyle(
            brush = brush, alpha = 1f
        )
    ) {
        append("Compose ❤️")
    }
}

टेक्स्ट के किसी हिस्से में पारदर्शिता जोड़ने के लिए, buildAnnotatedString और SpanStyle के ऐल्फ़ा पैरामीटर के साथ-साथ linearGradient का इस्तेमाल करना.
पांचवीं इमेज. टेक्स्ट के किसी हिस्से में पारदर्शिता जोड़ने के लिए, buildAnnotatedString और SpanStyle के ऐल्फ़ा पैरामीटर के साथ-साथ linearGradient का इस्तेमाल करना.

टेक्स्ट पर मार्की इफ़ेक्ट लागू करना

basicMarquee मॉडिफ़ायर को किसी भी कंपोज़ेबल पर लागू किया जा सकता है, ताकि स्क्रोलिंग का ऐनिमेशन इफ़ेक्ट जनरेट किया जा सके. अगर कॉन्टेंट, तय की गई सीमाओं के हिसाब से बहुत ज़्यादा चौड़ा है, तो मार्की इफ़ेक्ट दिखता है. डिफ़ॉल्ट रूप से, basicMarquee में कुछ कॉन्फ़िगरेशन (जैसे कि वेलोसिटी और शुरुआती देरी) सेट होते हैं. हालांकि, इफ़ेक्ट को पसंद के मुताबिक बनाने के लिए, इन पैरामीटर में बदलाव किया जा सकता है.

नीचे दिए गए स्निपेट में, Text कंपोज़ेबल पर बुनियादी मार्की इफ़ेक्ट लागू किया गया है:

@Composable
fun BasicMarqueeSample() {
    // Marquee only animates when the content doesn't fit in the max width.
    Column(Modifier.width(400.dp)) {
        Text(
            "Learn about why it's great to use Jetpack Compose",
            modifier = Modifier.basicMarquee(),
            fontSize = 50.sp
        )
    }
}

छठी इमेज. टेक्स्ट पर लागू किया गया basicMarquee मॉडिफ़ायर.

अन्य संसाधन