ফন্ট নিয়ে কাজ করুন

এই পৃষ্ঠায় আপনার কম্পোজ অ্যাপে কীভাবে ফন্ট সেট করতে হয় তা বর্ণনা করা হয়েছে।

ফন্ট সেট করুন

Text একটি fontFamily প্যারামিটার রয়েছে, যা কম্পোজেবলে ব্যবহৃত ফন্ট সেট করার সুযোগ দেয়। ডিফল্টরূপে, serif, sans-serif, monospace এবং cursive ফন্ট ফ্যামিলিগুলো অন্তর্ভুক্ত থাকে।

@Composable
fun DifferentFonts() {
    Column {
        Text("Hello World", fontFamily = FontFamily.Serif)
        Text("Hello World", fontFamily = FontFamily.SansSerif)
    }
}

শব্দগুলো

আপনি res/font ফোল্ডারে সংজ্ঞায়িত কাস্টম ফন্ট এবং টাইপফেস নিয়ে কাজ করার জন্য fontFamily অ্যাট্রিবিউটটি ব্যবহার করতে পারেন:

উন্নয়ন পরিবেশে res > font ফোল্ডারের গ্রাফিক্যাল চিত্রায়ন

এই উদাহরণটি দেখায় কিভাবে আপনি ঐ ফন্ট ফাইলগুলির উপর ভিত্তি করে এবং Font ফাংশনটি ব্যবহার করে একটি fontFamily সংজ্ঞায়িত করবেন:

val firaSansFamily = FontFamily(
    Font(R.font.firasans_light, FontWeight.Light),
    Font(R.font.firasans_regular, FontWeight.Normal),
    Font(R.font.firasans_italic, FontWeight.Normal, FontStyle.Italic),
    Font(R.font.firasans_medium, FontWeight.Medium),
    Font(R.font.firasans_bold, FontWeight.Bold)
)

আপনি এই fontFamily আপনার Text কম্পোজেবলে পাস করতে পারেন। যেহেতু একটি fontFamily বিভিন্ন ওয়েট থাকতে পারে, তাই আপনি আপনার টেক্সটের জন্য সঠিক ওয়েট নির্বাচন করতে ম্যানুয়ালি fontWeight সেট করতে পারেন:

Column {
    Text(text = "text", fontFamily = firaSansFamily, fontWeight = FontWeight.Light)
    Text(text = "text", fontFamily = firaSansFamily, fontWeight = FontWeight.Normal)
    Text(
        text = "text",
        fontFamily = firaSansFamily,
        fontWeight = FontWeight.Normal,
        fontStyle = FontStyle.Italic
    )
    Text(text = "text", fontFamily = firaSansFamily, fontWeight = FontWeight.Medium)
    Text(text = "text", fontFamily = firaSansFamily, fontWeight = FontWeight.Bold)
}

শব্দগুলো

আপনার পুরো অ্যাপে টাইপোগ্রাফি কীভাবে সেট করতে হয় তা জানতে, Compose-এর Custom design systems দেখুন।

ডাউনলোডযোগ্য ফন্ট

Compose 1.2.0 থেকে, আপনি আপনার Compose অ্যাপে ডাউনলোডযোগ্য ফন্ট এপিআই (API) ব্যবহার করে অ্যাসিঙ্ক্রোনাসভাবে গুগল ফন্ট ডাউনলোড করতে এবং আপনার অ্যাপে সেগুলো ব্যবহার করতে পারবেন।

কাস্টম প্রোভাইডারদের দেওয়া ডাউনলোডযোগ্য ফন্টের জন্য সমর্থন বর্তমানে উপলব্ধ নেই।

ডাউনলোডযোগ্য ফন্ট প্রোগ্রাম্যাটিকভাবে ব্যবহার করুন

আপনার অ্যাপের ভেতর থেকে প্রোগ্রাম্যাটিকভাবে একটি ফন্ট ডাউনলোড করতে, এই ধাপগুলো অনুসরণ করুন:

  1. নির্ভরতা যোগ করুন:

    গ্রুভি

    dependencies {
        ...
        implementation "androidx.compose.ui:ui-text-google-fonts:1.10.5"
    }

    কোটলিন

    dependencies {
        ...
        implementation("androidx.compose.ui:ui-text-google-fonts:1.10.5")
    }
  2. গুগল ফন্টের ক্রেডেনশিয়াল ব্যবহার করে GoogleFont.Provider চালু করুন:
    val provider = GoogleFont.Provider(
        providerAuthority = "com.google.android.gms.fonts",
        providerPackage = "com.google.android.gms",
        certificates = R.array.com_google_android_gms_fonts_certs
    )
    প্রোভাইডার যে প্যারামিটারগুলো গ্রহণ করে তা হলো:
    • গুগল ফন্টসের ফন্ট সরবরাহকারী কর্তৃপক্ষ।
    • প্রদানকারীর পরিচয় যাচাই করার জন্য ফন্ট প্রদানকারী প্যাকেজ।
    • প্রোভাইডারের পরিচয় যাচাই করার জন্য সার্টিফিকেটগুলোর হ্যাশ সেটের একটি তালিকা। আপনি Jetchat স্যাম্পল অ্যাপের font_certs.xml ফাইলে Google Fonts প্রোভাইডারের জন্য প্রয়োজনীয় হ্যাশগুলো খুঁজে পাবেন।
  3. একটি FontFamily সংজ্ঞায়িত করুন :
    // ...
     import androidx.compose.ui.text.googlefonts.GoogleFont
     import androidx.compose.ui.text.font.FontFamily
     import androidx.compose.ui.text.googlefonts.Font
     // ...
    
    val fontName = GoogleFont("Lobster Two")
    
    val fontFamily = FontFamily(
        Font(googleFont = fontName, fontProvider = provider)
    )
    আপনি FontWeight এবং FontStyle ব্যবহার করে যথাক্রমে আপনার ফন্টের ওজন এবং স্টাইলের মতো অন্যান্য প্যারামিটার সম্পর্কে জানতে পারেন:
    // ...
     import androidx.compose.ui.text.googlefonts.GoogleFont
     import androidx.compose.ui.text.font.FontFamily
     import androidx.compose.ui.text.googlefonts.Font
     // ...
    
    val fontName = GoogleFont("Lobster Two")
    
    val fontFamily = FontFamily(
        Font(
            googleFont = fontName,
            fontProvider = provider,
            weight = FontWeight.Bold,
            style = FontStyle.Italic
        )
    )
  4. আপনার টেক্সট কম্পোজেবল ফাংশনে ব্যবহার করার জন্য FontFamily কনফিগার করুন:

Text(
    fontFamily = fontFamily, text = "Hello World!"
)

আপনি আপনার FontFamily ব্যবহার করার জন্য টাইপোগ্রাফিও নির্ধারণ করতে পারেন:

val MyTypography = Typography(
    bodyMedium = TextStyle(
        fontFamily = fontFamily, fontWeight = FontWeight.Normal, fontSize = 12.sp/*...*/
    ),
    bodyLarge = TextStyle(
        fontFamily = fontFamily,
        fontWeight = FontWeight.Bold,
        letterSpacing = 2.sp,
        /*...*/
    ),
    headlineMedium = TextStyle(
        fontFamily = fontFamily, fontWeight = FontWeight.SemiBold/*...*/
    ),
    /*...*/
)

এরপর, আপনার অ্যাপের থিম অনুযায়ী টাইপোগ্রাফি সেট করুন:

MyAppTheme(
    typography = MyTypography
)/*...*/

Material3- এর সাথে Compose-এ ডাউনলোডযোগ্য ফন্ট প্রয়োগকারী একটি অ্যাপের উদাহরণের জন্য, Jetchat নমুনা অ্যাপটি দেখুন।

ফলব্যাক ফন্ট যোগ করুন

আপনার ফন্টটি সঠিকভাবে ডাউনলোড না হলে, তার জন্য আপনি একাধিক বিকল্প ব্যবস্থা নির্ধারণ করতে পারেন। উদাহরণস্বরূপ, যদি আপনার ডাউনলোডযোগ্য ফন্টটি এইভাবে সংজ্ঞায়িত করা থাকে:

// ...
 import androidx.compose.ui.text.googlefonts.Font
 // ...

val fontName = GoogleFont("Lobster Two")

val fontFamily = FontFamily(
    Font(googleFont = fontName, fontProvider = provider),
    Font(googleFont = fontName, fontProvider = provider, weight = FontWeight.Bold)
)

আপনি উভয় ওয়েটের জন্য আপনার ফন্টের ডিফল্ট মানগুলো এইভাবে নির্ধারণ করতে পারেন:

// ...
 import androidx.compose.ui.text.font.Font
 import androidx.compose.ui.text.googlefonts.Font
 // ...

val fontName = GoogleFont("Lobster Two")

val fontFamily = FontFamily(
    Font(googleFont = fontName, fontProvider = provider),
    Font(resId = R.font.my_font_regular),
    Font(googleFont = fontName, fontProvider = provider, weight = FontWeight.Bold),
    Font(resId = R.font.my_font_regular_bold, weight = FontWeight.Bold)
)

নিশ্চিত করুন যে আপনি সঠিক ইম্পোর্টগুলো যোগ করছেন।

এইভাবে FontFamily নির্ধারণ করলে এমন একটি FontFamily তৈরি হয় যাতে দুটি চেইন থাকে, প্রতিটি ওয়েটের জন্য একটি করে। লোডিং প্রক্রিয়াটি প্রথমে অনলাইন ফন্টটি এবং তারপরে আপনার স্থানীয় R.font রিসোর্স ফোল্ডারে অবস্থিত ফন্টটি খুঁজে বের করার চেষ্টা করবে।

আপনার বাস্তবায়ন ডিবাগ করুন

ফন্টটি সঠিকভাবে ডাউনলোড হচ্ছে কিনা তা যাচাই করতে, আপনি একটি ডিবাগ কো-রুটিন হ্যান্ডলার সংজ্ঞায়িত করতে পারেন। ফন্টটি অ্যাসিঙ্ক্রোনাসভাবে লোড হতে ব্যর্থ হলে কী করতে হবে, তা আপনার হ্যান্ডলারটি নির্ধারণ করে।

প্রথমে একটি CoroutineExceptionHandler তৈরি করে শুরু করুন:

val handler = CoroutineExceptionHandler { _, throwable ->
    // process the Throwable
    Log.e(TAG, "There has been an issue: ", throwable)
}

রিজলভারকে নতুন হ্যান্ডলারটি ব্যবহার করাতে, এটি createFontFamilyResolver মেথডে পাস করুন:

CompositionLocalProvider(
    LocalFontFamilyResolver provides createFontFamilyResolver(LocalContext.current, handler)
) {
    Column {
        Text(
            text = "Hello World!", style = MaterialTheme.typography.bodyMedium
        )
    }
}

প্রোভাইডারটি উপলব্ধ আছে কিনা এবং সার্টিফিকেটগুলো সঠিকভাবে কনফিগার করা আছে কিনা, তা পরীক্ষা করার জন্য আপনি প্রোভাইডার থেকে isAvailableOnDevice API-টিও ব্যবহার করতে পারেন। এটি করার জন্য, আপনি isAvailableOnDevice মেথডটি কল করতে পারেন, যা প্রোভাইডারটি ভুলভাবে কনফিগার করা থাকলে false রিটার্ন করে।

val context = LocalContext.current
LaunchedEffect(Unit) {
    if (provider.isAvailableOnDevice(context)) {
        Log.d(TAG, "Success!")
    }
}

সতর্কতা

অ্যান্ড্রয়েডে নতুন ফন্ট উপলব্ধ করতে গুগল ফন্টসের কয়েক মাস সময় লাগে। fonts.google.com- এ একটি ফন্ট যুক্ত হওয়ার পর থেকে ডাউনলোডযোগ্য ফন্ট এপিআই (View সিস্টেম বা Compose-এ) এর মাধ্যমে এটি উপলব্ধ হওয়া পর্যন্ত একটি সময়ের ব্যবধান থাকে। নতুন যুক্ত করা ফন্টগুলো আপনার অ্যাপে IllegalStateException ত্রুটির কারণে লোড হতে ব্যর্থ হতে পারে। ডেভেলপারদের অন্যান্য ধরনের ফন্ট লোডিং ত্রুটি থেকে এই ত্রুটিটি শনাক্ত করতে সাহায্য করার জন্য, আমরা এখানের পরিবর্তনগুলোর সাথে Compose-এ এই এক্সেপশনের জন্য বর্ণনামূলক মেসেজিং যুক্ত করেছি। আপনি যদি কোনো সমস্যা খুঁজে পান, তবে ইস্যু ট্র্যাকার ব্যবহার করে তা রিপোর্ট করুন।

পরিবর্তনশীল ফন্ট ব্যবহার করুন

ভেরিয়েবল ফন্ট হলো এমন একটি ফন্ট ফরম্যাট যা একটি ফন্ট ফাইলে বিভিন্ন স্টাইল ধারণ করার সুযোগ দেয়। ভেরিয়েবল ফন্টের সাহায্যে, আপনি আপনার পছন্দের স্টাইল তৈরি করতে অ্যাক্সিস (বা প্যারামিটার) পরিবর্তন করতে পারেন। এই অ্যাক্সিসগুলো স্ট্যান্ডার্ড হতে পারে, যেমন ওয়েট, উইডথ, স্ল্যান্ট এবং ইটালিক, অথবা কাস্টম হতে পারে, যা প্রতিটি ভেরিয়েবল ফন্টে ভিন্ন ভিন্ন হয়।

ভিন্ন ভিন্ন অক্ষের মান সহ একই পরিবর্তনশীল ফন্টের পাঁচটি বিন্যাস।
চিত্র ১. একই পরিবর্তনশীল ফন্ট ব্যবহার করে বিভিন্ন অক্ষের মান দিয়ে কাস্টমাইজ করা লেখা।

সাধারণ ফন্ট ফাইলের পরিবর্তে ভ্যারিয়েবল ফন্ট ব্যবহার করলে একাধিক ফাইলের বদলে মাত্র একটি ফন্ট ফাইলই যথেষ্ট হয়।

ভেরিয়েবল ফন্ট সম্পর্কে আরও বিস্তারিত জানতে, গুগল ফন্টস নলেজ (Google Fonts Knowledge) , উপলব্ধ ভেরিয়েবল ফন্টগুলোর সম্পূর্ণ ক্যাটালগ এবং প্রতিটি ফন্টের সমর্থিত অক্ষগুলোর সারণী দেখুন।

এই ডক্যুমেন্টেশনে দেখানো হয়েছে কিভাবে আপনার কম্পোজ অ্যাপে একটি ভ্যারিয়েবল ফন্ট প্রয়োগ করতে হয়।

একটি পরিবর্তনশীল ফন্ট লোড করুন

  1. আপনি যে ভ্যারিয়েবল ফন্টটি ব্যবহার করতে চান (উদাহরণস্বরূপ Roboto Flex ) সেটি ডাউনলোড করে আপনার অ্যাপের app/res/font ফোল্ডারে রাখুন। নিশ্চিত করুন যে আপনি যে ttf ফাইলটি যোগ করছেন তা ফন্টটির ভ্যারিয়েবল সংস্করণ , এবং আপনার ফন্ট ফাইলের নামটি সম্পূর্ণ ছোট হাতের অক্ষরে লেখা ও এতে কোনো বিশেষ অক্ষর নেই।

  2. ভেরিয়েবল ফন্ট লোড করতে, res/font/ ডিরেক্টরিতে রাখা ফন্টটি ব্যবহার করে একটি FontFamily নির্ধারণ করুন:

    // In Typography.kt
    @OptIn(ExperimentalTextApi::class)
    val displayLargeFontFamily =
        FontFamily(
            Font(
                R.font.robotoflex_variable,
                variationSettings = FontVariation.Settings(
                    FontVariation.weight(950),
                    FontVariation.width(30f),
                    FontVariation.slant(-6f),
                )
            )
        )

    FontVariation API আপনাকে weight , width , এবং slant- এর মতো স্ট্যান্ডার্ড ফন্ট অ্যাক্সিসগুলো কনফিগার করার সুযোগ দেয়। এগুলো হলো স্ট্যান্ডার্ড অ্যাক্সিস যা যেকোনো ভ্যারিয়েবল ফন্টের সাথেই পাওয়া যায়। ফন্টটি কোথায় ব্যবহার করা হবে তার উপর ভিত্তি করে আপনি ফন্টের বিভিন্ন কনফিগারেশন তৈরি করতে পারেন।

  3. পরিবর্তনশীল ফন্ট শুধুমাত্র অ্যান্ড্রয়েড সংস্করণ O এবং তার উপরের সংস্করণগুলোর জন্য উপলব্ধ, তাই একটি গার্ডরেল যোগ করুন এবং একটি উপযুক্ত ফলব্যাক কনফিগার করুন:

    // In Typography.kt
    val default = FontFamily(
        /*
        * This can be any font that makes sense
        */
        Font(
            R.font.robotoflex_static_regular
        )
    )
    @OptIn(ExperimentalTextApi::class)
    val displayLargeFontFamily = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        FontFamily(
            Font(
                R.font.robotoflex_variable,
                variationSettings = FontVariation.Settings(
                    FontVariation.weight(950),
                    FontVariation.width(30f),
                    FontVariation.slant(-6f),
                )
            )
        )
    } else {
        default
    }

  4. সহজ পুনঃব্যবহারের জন্য সেটিংসগুলোকে একগুচ্ছ কনস্ট্যান্টে বের করে নিন এবং ফন্ট সেটিংসগুলোকে এই কনস্ট্যান্টগুলো দিয়ে প্রতিস্থাপন করুন:

    // VariableFontDimension.kt
    object DisplayLargeVFConfig {
        const val WEIGHT = 950
        const val WIDTH = 30f
        const val SLANT = -6f
        const val ASCENDER_HEIGHT = 800f
        const val COUNTER_WIDTH = 500
    }
    
    @OptIn(ExperimentalTextApi::class)
    val displayLargeFontFamily = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        FontFamily(
            Font(
                R.font.robotoflex_variable,
                variationSettings = FontVariation.Settings(
                    FontVariation.weight(DisplayLargeVFConfig.WEIGHT),
                    FontVariation.width(DisplayLargeVFConfig.WIDTH),
                    FontVariation.slant(DisplayLargeVFConfig.SLANT),
                )
            )
        )
    } else {
        default
    }

  5. এই FontFamily ব্যবহার করার জন্য Material Design 3 টাইপোগ্রাফি কনফিগার করুন:

    // Type.kt
    val Typography = Typography(
        displayLarge = TextStyle(
            fontFamily = displayLargeFontFamily,
            fontSize = 50.sp,
            lineHeight = 64.sp,
            letterSpacing = 0.sp,
            /***/
        )
    )

    এই নমুনাটিতে displayLarge Material 3 টাইপোগ্রাফি ব্যবহার করা হয়েছে, যার ডিফল্ট ফন্ট সেটিংস এবং প্রস্তাবিত ব্যবহার ভিন্ন। উদাহরণস্বরূপ, সংক্ষিপ্ত ও গুরুত্বপূর্ণ লেখার জন্য আপনার displayLarge ব্যবহার করা উচিত, কারণ এটি স্ক্রিনের সবচেয়ে বড় লেখা।

    Material 3-এর সাহায্যে, আপনি আপনার টাইপোগ্রাফি কাস্টমাইজ করতে TextStyle এবং fontFamily এর ডিফল্ট মান পরিবর্তন করতে পারেন। উপরের কোড স্নিপেটে, আপনি প্রতিটি ফন্ট ফ্যামিলির জন্য ফন্ট সেটিংস কাস্টমাইজ করতে TextStyle এর ইনস্ট্যান্সগুলো কনফিগার করেছেন।

  6. এখন যেহেতু আপনি আপনার টাইপোগ্রাফি নির্ধারণ করেছেন, এটি M3 MaterialTheme এ পাঠান:

    MaterialTheme(
        colorScheme = MaterialTheme.colorScheme,
        typography = Typography,
        content = content
    )

  7. অবশেষে, একটি Text কম্পোজেবল ব্যবহার করুন এবং স্টাইলটি MaterialTheme.typography.displayLarge সংজ্ঞায়িত টাইপোগ্রাফি স্টাইলগুলির মধ্যে একটিতে নির্দিষ্ট করুন।

    @Composable
    @Preview
    fun CardDetails() {
        MyCustomTheme {
            Card(
                shape = RoundedCornerShape(8.dp),
                elevation = CardDefaults.cardElevation(defaultElevation = 4.dp),
                modifier = Modifier
                    .fillMaxWidth()
                    .padding(16.dp)
            ) {
                Column(
                    modifier = Modifier.padding(16.dp)
                ) {
                    Text(
                        text = "Compose",
                        style = MaterialTheme.typography.displayLarge,
                        modifier = Modifier.padding(bottom = 8.dp),
                        maxLines = 1
                    )
                    Text(
                        text = "Beautiful UIs on Android",
                        style = MaterialTheme.typography.headlineMedium,
                        modifier = Modifier.padding(bottom = 8.dp),
                        maxLines = 2
                    )
                    Text(
                        text = "Jetpack Compose is Android’s recommended modern toolkit for building native UI. It simplifies and accelerates UI development on Android. Quickly bring your app to life with less code, powerful tools, and intuitive Kotlin APIs.",
                        style = MaterialTheme.typography.bodyLarge,
                        modifier = Modifier.padding(bottom = 8.dp),
                        maxLines = 3
                    )
                }
            }
        }
    }

    প্রতিটি Text কম্পোজেবল তার ম্যাটেরিয়াল থিমের স্টাইলের মাধ্যমে কনফিগার করা হয় এবং এতে একটি ভিন্ন ভ্যারিয়েবল ফন্ট কনফিগারেশন থাকে। আপনি M3 MaterialTheme থিম কম্পোজেবলে প্রদত্ত টাইপোগ্রাফি পেতে MaterialTheme.typography ব্যবহার করতে পারেন।

তিনটি ভিন্ন লেখা, যেগুলোর প্রতিটিতেই ভিন্ন ভিন্ন ফন্ট বিন্যাস দেখানো হয়েছে।
চিত্র ২. তিনটি ভিন্ন বিন্যাসে পরিবর্তনশীল ফন্টের প্রয়োগ।

কাস্টম অক্ষ ব্যবহার করুন

ফন্টে নিজস্ব অক্ষও থাকতে পারে। এগুলো ফন্ট ফাইলের মধ্যেই নির্ধারণ করা হয়। উদাহরণস্বরূপ, রোবোটো ফ্লেক্স ফন্টে অ্যাসেন্ডার হাইট ( "YTAS" ) অক্ষ রয়েছে, যা ছোট হাতের অক্ষরের অ্যাসেন্ডারগুলোর উচ্চতা সমন্বয় করে, অন্যদিকে কাউন্টার উইডথ ( "XTRA" ) প্রতিটি অক্ষরের প্রস্থ সমন্বয় করে।

আপনি FontVariation সেটিংস ব্যবহার করে এই অক্ষগুলোর মান পরিবর্তন করতে পারেন।

একটি ফন্টের জন্য আপনি যে কাস্টম অক্ষগুলো কনফিগার করতে পারেন, সে সম্পর্কে আরও তথ্যের জন্য প্রতিটি ফন্টের সমর্থিত অক্ষগুলোর সারণিটি দেখুন।

  1. কাস্টম অক্ষ ব্যবহার করতে, কাস্টম ascenderHeight এবং counterWidth অক্ষের জন্য ফাংশন সংজ্ঞায়িত করুন:

    fun ascenderHeight(ascenderHeight: Float): FontVariation.Setting {
        require(ascenderHeight in 649f..854f) { "'Ascender Height' must be in 649f..854f" }
        return FontVariation.Setting("YTAS", ascenderHeight)
    }
    
    fun counterWidth(counterWidth: Int): FontVariation.Setting {
        require(counterWidth in 323..603) { "'Counter width' must be in 323..603" }
        return FontVariation.Setting("XTRA", counterWidth.toFloat())
    }

    এই ফাংশনগুলো নিম্নলিখিত কাজগুলো করে:

    • তারা যে মানগুলো গ্রহণ করতে পারে, তার জন্য নির্দিষ্ট সীমা নির্ধারণ করুন। যেমনটি আপনি ভেরিয়েবল ফন্ট ক্যাটালগে দেখতে পাচ্ছেন, ascenderHeight (YTAS) -এর সর্বনিম্ন মান 649f এবং সর্বোচ্চ মান 854f
    • ফন্ট সেটিংটি ফেরত দিন, যাতে কনফিগারেশনটি ফন্টে যোগ করার জন্য প্রস্তুত থাকে। FontVariation.Setting() মেথডটিতে, অ্যাক্সিসের নাম ( YTAS, XTRA ) হার্ডকোড করা থাকে এবং এটি প্যারামিটার হিসেবে মানটি গ্রহণ করে।
  2. ফন্ট কনফিগারেশনের সাথে অ্যাক্সিস ব্যবহার করে, লোড করা প্রতিটি Font অতিরিক্ত প্যারামিটার পাস করুন:

    @OptIn(ExperimentalTextApi::class)
    val displayLargeFontFamily = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        FontFamily(
            Font(
                R.font.robotoflex_variable,
                variationSettings = FontVariation.Settings(
                    FontVariation.weight(DisplayLargeVFConfig.WEIGHT),
                    FontVariation.width(DisplayLargeVFConfig.WIDTH),
                    FontVariation.slant(DisplayLargeVFConfig.SLANT),
                    ascenderHeight(DisplayLargeVFConfig.ASCENDER_HEIGHT),
                    counterWidth(DisplayLargeVFConfig.COUNTER_WIDTH)
                )
            )
        )
    } else {
        default
    }

    লক্ষ্য করুন যে, ছোট হাতের অক্ষরের অ্যাসেন্ডারগুলোর উচ্চতা এখন বাড়ানো হয়েছে এবং অন্য লেখাটি আরও চওড়া হয়েছে:

পরিবর্তনশীল ফন্টের ভিন্ন ভিন্ন কনফিগারেশন দেখানো তিনটি আলাদা টেক্সট, যেখানে কাস্টম অ্যাক্সিস সেট করা আছে— কয়েকটির ছোট হাতের অক্ষরের অ্যাসেন্ডার আগের চেয়ে উঁচু এবং চওড়া।
চিত্র ৩. পরিবর্তনশীল ফন্টে সেট করা কাস্টম অক্ষ দেখানো টেক্সট।

অতিরিক্ত সম্পদ

ভেরিয়েবল ফন্ট সম্পর্কে আরও তথ্যের জন্য, নিম্নলিখিত ব্লগ পোস্টটি দেখুন:

{% হুবহু %} {% endverbatim %} {% হুবহু %} {% endverbatim %}