কম্পোজ সম্পদ

Jetpack Compose আপনার অ্যান্ড্রয়েড প্রজেক্টে সংজ্ঞায়িত রিসোর্সগুলো অ্যাক্সেস করতে পারে। এই ডকুমেন্টটিতে Compose-এর দেওয়া কিছু API ব্যাখ্যা করা হয়েছে, যা এই কাজটি করতে সাহায্য করে।

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

স্ট্রিং

সবচেয়ে সাধারণ ধরনের রিসোর্স হলো স্ট্রিং। আপনার XML রিসোর্সে স্থিরভাবে সংজ্ঞায়িত কোনো স্ট্রিং পুনরুদ্ধার করতে stringResource API ব্যবহার করুন।

// In the res/values/strings.xml file
// <string name="compose">Jetpack Compose</string>

// In your Compose code
Text(
    text = stringResource(R.string.compose)
)

stringResource পজিশনাল ফরম্যাটিংয়ের সাথেও কাজ করে।

// In the res/values/strings.xml file
// <string name="congratulate">Happy %1$s %2$d</string>

// In your Compose code
Text(
    text = stringResource(R.string.congratulate, "New Year", 2021)
)

স্ট্রিং বহুবচন (পরীক্ষামূলক)

একটি নির্দিষ্ট পরিমাণসহ বহুবচন লোড করতে pluralStringResource API ব্যবহার করুন।

// In the res/strings.xml file
// <plurals name="runtime_format">
//    <item quantity="one">%1$d minute</item>
//    <item quantity="other">%1$d minutes</item>
// </plurals>

// In your Compose code
Text(
    text = pluralStringResource(
        R.plurals.runtime_format,
        quantity,
        quantity
    )
)

pluralStringResource মেথডটি ব্যবহার করার সময়, যদি আপনার স্ট্রিং-এ সংখ্যাসহ স্ট্রিং ফরম্যাটিং থাকে, তাহলে আপনাকে count প্যারামিটারটি দুইবার পাস করতে হবে। উদাহরণস্বরূপ, %1$d minutes স্ট্রিংটির জন্য, প্রথম count প্যারামিটারটি উপযুক্ত প্লুরাল স্ট্রিং নির্বাচন করে এবং দ্বিতীয় count প্যারামিটারটি %1$d প্লেসহোল্ডারে বসানো হয়। যদি আপনার প্লুরাল স্ট্রিংগুলোতে কোনো স্ট্রিং ফরম্যাটিং না থাকে, তাহলে pluralStringResource এ তৃতীয় প্যারামিটারটি পাস করার প্রয়োজন নেই।

বহুবচন সম্পর্কে আরও তথ্যের জন্য, পরিমাণ স্ট্রিং ডকুমেন্টেশন দেখুন।

মাত্রা

একইভাবে, একটি রিসোর্স XML ফাইল থেকে ডাইমেনশন পেতে dimensionResource API ব্যবহার করুন।

// In the res/values/dimens.xml file
// <dimen name="padding_small">8dp</dimen>

// In your Compose code
val smallPadding = dimensionResource(R.dimen.padding_small)
Text(
    text = "...",
    modifier = Modifier.padding(smallPadding)
)

রং

আপনি যদি আপনার অ্যাপে পর্যায়ক্রমে Compose ব্যবহার শুরু করেন, তাহলে একটি রিসোর্স XML ফাইল থেকে রংগুলো পেতে colorResource API ব্যবহার করুন।

// In the res/colors.xml file
// <color name="purple_200">#FFBB86FC</color>

// In your Compose code
HorizontalDivider(color = colorResource(R.color.purple_200))

colorResource স্থির রঙের ক্ষেত্রে প্রত্যাশিতভাবেই কাজ করে, কিন্তু এটি রঙের অবস্থা তালিকার রিসোর্সগুলোকে সমতল করে দেয়।

ভেক্টর সম্পদ এবং চিত্র সম্পদ

ভেক্টর ড্রয়েবল অথবা পিএনজি-র মতো রাস্টারাইজড অ্যাসেট ফরম্যাট লোড করতে painterResource API ব্যবহার করুন। ড্রয়েবলটির ধরন জানার প্রয়োজন নেই, কেবল Image কম্পোজেবল বা paint মডিফায়ারে painterResource ব্যবহার করুন।

// Files in res/drawable folders. For example:
// - res/drawable-nodpi/ic_logo.xml
// - res/drawable-xxhdpi/ic_logo.png

// In your Compose code
Icon(
    painter = painterResource(id = R.drawable.ic_logo),
    contentDescription = null // decorative element
)

painterResource প্রধান থ্রেডে রিসোর্সটির বিষয়বস্তু ডিকোড ও পার্স করে।

অ্যানিমেটেড ভেক্টর ড্রয়েবল

একটি অ্যানিমেটেড ভেক্টর ড্রয়েবল XML লোড করতে AnimatedImageVector.animatedVectorResource API ব্যবহার করুন। এই মেথডটি একটি AnimatedImageVector ইনস্ট্যান্স রিটার্ন করে। অ্যানিমেটেড ছবিটি প্রদর্শন করার জন্য, rememberAnimatedVectorPainter মেথড ব্যবহার করে একটি Painter তৈরি করুন যা Image এবং Icon কম্পোজেবলে ব্যবহার করা যেতে পারে। rememberAnimatedVectorPainter মেথডের বুলিয়ান atEnd প্যারামিটারটি নির্দেশ করে যে সমস্ত অ্যানিমেশনের শেষে ছবিটি আঁকা হবে কি না। যদি এটি একটি মিউটেবল স্টেটের সাথে ব্যবহার করা হয়, তবে এই মানের পরিবর্তন সংশ্লিষ্ট অ্যানিমেশনটি ট্রিগার করে।

// Files in res/drawable folders. For example:
// - res/drawable/ic_hourglass_animated.xml

// In your Compose code
val image =
    AnimatedImageVector.animatedVectorResource(R.drawable.ic_hourglass_animated)
val atEnd by remember { mutableStateOf(false) }
Icon(
    painter = rememberAnimatedVectorPainter(image, atEnd),
    contentDescription = null // decorative element
)

আইকন

Jetpack Compose-এর সাথে Icons অবজেক্টটি আসে, যা Compose-এ Material Icons ব্যবহার করার মূল মাধ্যম। এখানে পাঁচটি স্বতন্ত্র আইকন থিম রয়েছে: Filled , Outlined , Rounded , TwoTone এবং Sharp । প্রতিটি থিমে একই আইকন থাকে, কিন্তু সেগুলোর ভিজ্যুয়াল স্টাইল আলাদা। সামঞ্জস্য রক্ষার জন্য আপনার সাধারণত একটি থিম বেছে নিয়ে পুরো অ্যাপ্লিকেশনে সেটিই ব্যবহার করা উচিত।

আইকন আঁকতে, আপনি Icon কম্পোজেবল ব্যবহার করতে পারেন, যা আইকনের সাথে সামঞ্জস্যপূর্ণ টিন্ট ও লেআউট সাইজ প্রয়োগ করে।

Icon(Icons.Rounded.Menu, contentDescription = "Localized description")

সবচেয়ে বেশি ব্যবহৃত কিছু আইকন androidx.compose.material ডিপেন্ডেন্সির অংশ হিসেবে পাওয়া যায়। অন্য যেকোনো ম্যাটেরিয়াল আইকন ব্যবহার করতে, build.gradle ফাইলে material-icons-extended ডিপেন্ডেন্সিটি যোগ করুন।

dependencies {
  def composeBom = platform('androidx.compose:compose-bom:2026.03.00')
  implementation composeBom

  implementation 'androidx.compose.material:material-icons-extended'
}

ফন্ট

Compose-এ ফন্ট ব্যবহার করতে, ফন্ট ফাইলগুলো ডাউনলোড করে সরাসরি আপনার APK-এর res/font ফোল্ডারে রাখুন।

Font এপিআই ব্যবহার করে প্রতিটি ফন্ট লোড করুন এবং সেগুলো দিয়ে একটি FontFamily তৈরি করুন, যা আপনি আপনার নিজস্ব Typography তৈরি করতে TextStyle ইনস্ট্যান্সে ব্যবহার করতে পারবেন। নিম্নলিখিত কোডটি ক্রেন কম্পোজ স্যাম্পল এবং এর Typography.kt ফাইল থেকে নেওয়া হয়েছে।

// Define and load the fonts of the app
private val light = Font(R.font.raleway_light, FontWeight.W300)
private val regular = Font(R.font.raleway_regular, FontWeight.W400)
private val medium = Font(R.font.raleway_medium, FontWeight.W500)
private val semibold = Font(R.font.raleway_semibold, FontWeight.W600)

// Create a font family to use in TextStyles
private val craneFontFamily = FontFamily(light, regular, medium, semibold)

// Use the font family to define a custom typography
val craneTypography = Typography(
    titleLarge = TextStyle(
        fontFamily = craneFontFamily
    ) /* ... */
)

// Pass the typography to a MaterialTheme that will create a theme using
// that typography in the part of the UI hierarchy where this theme is used
@Composable
fun CraneTheme(content: @Composable () -> Unit) {
    MaterialTheme(typography = craneTypography) {
        content()
    }
}

Compose-এ ডাউনলোডযোগ্য ফন্ট ব্যবহার করার জন্য, ডাউনলোডযোগ্য ফন্ট পৃষ্ঠাটি দেখুন।

Compose-এর থিমিং ডকুমেন্টেশনে টাইপোগ্রাফি সম্পর্কে আরও জানুন।

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