কম্পোজ সম্পদ

জেটপ্যাক কম্পোজ আপনার অ্যান্ড্রয়েড প্রোজেক্টে সংজ্ঞায়িত রিসোর্সগুলি অ্যাক্সেস করতে পারে। এই ডকুমেন্টটি কম্পোজের কিছু 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 পদ্ধতি ব্যবহার করার সময়, যদি আপনার স্ট্রিংয়ে একটি সংখ্যা সহ স্ট্রিং ফর্ম্যাটিং থাকে তবে আপনাকে দুবার গণনা পাস করতে হবে। উদাহরণস্বরূপ, %1$d minutes স্ট্রিংয়ের জন্য, প্রথম গণনা প্যারামিটারটি উপযুক্ত বহুবচন স্ট্রিং নির্বাচন করে এবং দ্বিতীয় গণনা প্যারামিটারটি %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 স্ট্যাটিক রঙের সাথে প্রত্যাশা অনুযায়ী কাজ করে, কিন্তু এটি color state list resource গুলিকে সমতল করে।

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

ভেক্টর ড্রয়েবল অথবা পিএনজি-র মতো রাস্টারাইজড অ্যাসেট ফর্ম্যাট লোড করতে 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 মূল থ্রেডে রিসোর্সের বিষয়বস্তু ডিকোড এবং পার্স করে।

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

AnimatedImageVector.animatedVectorResource API ব্যবহার করে একটি অ্যানিমেটেড ভেক্টর ড্রয়যোগ্য XML লোড করুন। এই পদ্ধতিটি একটি AnimatedImageVector ইনস্ট্যান্স প্রদান করে। অ্যানিমেটেড ছবি প্রদর্শনের জন্য, rememberAnimatedVectorPainter পদ্ধতি ব্যবহার করে একটি Painter তৈরি করুন যা Image এবং Icon composables-এ ব্যবহার করা যেতে পারে। rememberAnimatedVectorPainter পদ্ধতির boolean 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
)

আইকন

জেটপ্যাক কম্পোজে Icons অবজেক্ট থাকে যা কম্পোজে ম্যাটেরিয়াল আইকন ব্যবহারের জন্য এন্ট্রি পয়েন্ট। পাঁচটি স্বতন্ত্র আইকন থিম রয়েছে: Filled , Outlined , Rounded , TwoTone , এবং Sharp । প্রতিটি থিমে একই আইকন থাকে, তবে একটি স্বতন্ত্র ভিজ্যুয়াল স্টাইল থাকে। আপনার সাধারণত একটি থিম বেছে নেওয়া উচিত এবং ধারাবাহিকতার জন্য এটি আপনার অ্যাপ্লিকেশন জুড়ে ব্যবহার করা উচিত।

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

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

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

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

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

ফন্ট

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

Font API ব্যবহার করে প্রতিটি ফন্ট লোড করুন এবং সেগুলি দিয়ে একটি FontFamily তৈরি করুন যা আপনি TextStyle ইনস্ট্যান্সে ব্যবহার করে আপনার নিজস্ব Typography তৈরি করতে পারেন। নিম্নলিখিত কোডটি Crane compose নমুনা এবং এর 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()
    }
}

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

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

{% অক্ষরে অক্ষরে %} {% এন্ডভারব্যাটিম %} {% অক্ষরে অক্ষরে %} {% এন্ডভারব্যাটিম %}