منابع در Compose

Jetpack Compose می‌تواند به منابع تعریف‌شده در پروژه اندروید شما دسترسی پیدا کند. این سند برخی از APIهایی که Compose برای این کار ارائه می‌دهد را توضیح می‌دهد.

منابع، فایل‌های اضافی و محتوای استاتیکی هستند که کد شما از آنها استفاده می‌کند، مانند بیت‌مپ‌ها، تعاریف طرح‌بندی، رشته‌های رابط کاربری، دستورالعمل‌های انیمیشن و موارد دیگر. اگر با منابع در اندروید آشنا نیستید، راهنمای مرور کلی منابع برنامه را بررسی کنید.

رشته‌ها

رایج‌ترین نوع منبع، رشته‌های شما هستند. از API stringResource برای بازیابی رشته‌ای که به صورت ایستا در منابع XML شما تعریف شده است، استفاده کنید.

// 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)
)

جمع‌های رشته‌ای (آزمایشی)

از API pluralStringResource برای بارگذاری یک متغیر جمع با تعداد مشخص استفاده کنید.

// 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 ندارید.

برای اطلاعات بیشتر در مورد جمع‌ها، مستندات رشته کمیت را بررسی کنید.

ابعاد

به طور مشابه، از API dimensionResource برای دریافت ابعاد از یک فایل XML منبع استفاده کنید.

// 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 در برنامه خود استفاده می‌کنید، از API colorResource برای دریافت رنگ‌ها از یک فایل XML منبع استفاده کنید.

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

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

colorResource همانطور که انتظار می‌رود با رنگ‌های استاتیک کار می‌کند، اما منابع لیست وضعیت رنگ را مسطح می‌کند.

منابع تصویری وکتور

از API painterResource برای بارگذاری فایل‌های قابل ترسیم برداری یا فرمت‌های تصویری رستری مانند PNG استفاده کنید. نیازی نیست نوع فایل قابل ترسیم را بدانید، کافیست painterResource در Image composables یا paint modifiers استفاده کنید.

// 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 محتوای منبع را در thread اصلی رمزگشایی و تجزیه می‌کند.

وکتورهای متحرک Drawables

از API AnimatedImageVector.animatedVectorResource برای بارگذاری یک بردار متحرک قابل ترسیم XML استفاده کنید. این متد یک نمونه AnimatedImageVector را برمی‌گرداند. برای نمایش تصویر متحرک، از متد rememberAnimatedVectorPainter برای ایجاد یک Painter که می‌تواند در ترکیب‌های Image و Icon استفاده شود، استفاده کنید. پارامتر boolean atEnd از متد rememberAnimatedVectorPainter نشان می‌دهد که آیا تصویر باید در انتهای تمام انیمیشن‌ها ترسیم شود یا خیر. در صورت استفاده با یک حالت تغییرپذیر، تغییرات در این مقدار، انیمیشن مربوطه را فعال می‌کند.

// 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 ارائه می‌شود که نقطه ورود برای استفاده از آیکون‌های Material در Compose است. پنج تم آیکون مجزا وجود دارد: Filled ، Outlined ، Rounded ، TwoTone و Sharp . هر تم شامل آیکون‌های یکسانی است، اما با سبک بصری متمایز. شما معمولاً باید یک تم را انتخاب کنید و برای هماهنگی در سراسر برنامه خود از آن استفاده کنید.

برای رسم یک آیکون، می‌توانید از Icon composable استفاده کنید که رنگ را اعمال می‌کند و اندازه طرح‌بندی را مطابق با آیکون ارائه می‌دهد.

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

برخی از آیکون‌های پرکاربرد به عنوان بخشی از وابستگی androidx.compose.material در دسترس هستند. برای استفاده از هر یک از آیکون‌های Material دیگر، وابستگی material-icons-extended به فایل build.gradle اضافه کنید.

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

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

فونت‌ها

برای استفاده از فونت‌ها در Compose، فایل‌های فونت را دانلود کرده و مستقیماً در فایل‌های 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()
    }
}

برای استفاده از فونت‌های قابل دانلود در Compose، به صفحه فونت‌های قابل دانلود مراجعه کنید.

برای کسب اطلاعات بیشتر در مورد تایپوگرافی، به مستندات Theming in Compose مراجعه کنید.

{% کلمه به کلمه %} {% فعل کمکی %} {% کلمه به کلمه %} {% فعل کمکی %}