কম্পোজ সম্পদ

জেটপ্যাক রচনা আপনার অ্যান্ড্রয়েড প্রকল্পে সংজ্ঞায়িত সংস্থানগুলি অ্যাক্সেস করতে পারে। এই দস্তাবেজটি ব্যাখ্যা করে যে কিছু 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)
)

রং

আপনি যদি আপনার অ্যাপে ক্রমবর্ধমানভাবে রচনা গ্রহণ করেন, তাহলে একটি সম্পদ XML ফাইল থেকে রং পেতে colorResource API ব্যবহার করুন।

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

// In your Compose code
Divider(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 উদাহরণ প্রদান করে। অ্যানিমেটেড ইমেজ প্রদর্শন করার জন্য, একটি Painter তৈরি করতে rememberAnimatedVectorPainter পেইন্টার পদ্ধতি ব্যবহার করুন যা 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
)

আইকন

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

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

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

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

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

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

হরফ

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

Font API ব্যবহার করে প্রতিটি ফন্ট লোড করুন এবং তাদের সাথে একটি 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()
    }
}

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

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

{% শব্দার্থে %} {% endverbatim %} {% শব্দার্থে %} {% endverbatim %}