طراحی تم روشن و تاریک در Jetpack Compose

طراحی تم روشن و تاریک در Jetpack Compose
در این پست می‌خوانید:

سلام، در این مقاله قصد دارم درباره‌ی نحوه‌ی پیاده‌سازی تم روشن و تاریک در Jetpack Compose صحبت کنم. موضوعی که در طراحی رابط کاربری بسیار اهمیت دارد، تطبیق رابط با شرایط نوری مختلف (روز و شب) است. در این مطلب یاد می‌گیریم چگونه اپلیکیشن خود را طوری تنظیم کنیم که به‌صورت خودکار  بین این دو حالت جابه‌جا شود.

 

تم روشن و تاریک در Jetpack Compose

ایجاد پروژه جدید در Android Studio

در ابتدا یک پروژه ساده در Android Studio ایجاد می‌کنیم:

تعریف رنگ‌ها در فایل Color.kt

در این جا ، من روی فایل Color.kt کلیک کردم که داره نشون میده که کد رنگ ها رو اضافه کردم که برای حالت شب است ، برای حالت روز با همین نام هاست فقط اول هر نام Light جدا میشه چون Primary رو در قسمت فایل Theme.kt در قسمت Primary استفاده میشه ،  اگر در مال شما این کد ها نیست میتونید این ها رو کپی کنید ، نگران نباشید در آینده باید این ها  رو به صورت سلیقه خودتون بچینید

کد رنگها :

//Dark Theme
val darkPrimary = Color(0xFF00FF00)
//val darkOnPrimary =
//val darkBackground =
//val darkOnBackground =
//val darkSurface =
//val darkOnSurface =

تنظیمات تم در فایل Theme.kt

در ادامه من وارد  فایل  Theme.kt میشم که  میشه گفت فایل اصلی ما هست که بخوایم این تم ها رو عوض کنیم

theme

کد های عکس بالا در زیر هستند  و همین طوری که در فایل Color.kt توضیح دادم رنگ های که در اون جا هست رو میتونید در این این جا استفاده کنید مثلا در قسمت Primary من از کد رنگ مستقیم استفاده کردم و یا میتونید به رنگی که در Color.kt تعریف شده است ارجاع بدید مانند onPrimary .

کد کامل این فایل رو می تونید در پایین ببینید:

import android.app.Activity
import android.os.Build
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Shapes
import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.dynamicDarkColorScheme
import androidx.compose.material3.dynamicLightColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext

// رنگ‌های دلخواه برای روز
private val LightColorScheme = lightColorScheme(
    primary = Color(0xFF00FF00), // سبز
    onPrimary = Color.White,
    background = Color.Blue,
    onBackground = Color.Black,
    surface = Color(0xFFE0F2F1),
    onSurface = Color.Black
)

// رنگ‌های دلخواه برای شب
private val DarkColorScheme = darkColorScheme(
    primary = Color(0xFFFF0000), // قرمز
    onPrimary = Color.Black,
    background = Color(0xFF121212),
    onBackground = Color.White,
    surface = Color(0xFF1E1E1E),
    onSurface = Color.White
)

@Composable
fun AppTheme(
    darkTheme: Boolean = isSystemInDarkTheme(),
    content: @Composable () -> Unit
) {
    //    val colorScheme = when {
//        dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
//            val context = LocalContext.current
//            if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
//        }
//
//        darkTheme -> DarkColorScheme
//        else -> LightColorScheme
//    }
    val colorScheme = if (darkTheme) DarkColorScheme else LightColorScheme

    MaterialTheme(
        colorScheme = colorScheme,
        typography = Typography,
        shapes = Shapes,
        content = content
    )
}

توضیحات کد :

  • در بالای این کد ، دوتا متغییر میبینید مانند private val DarkColorScheme که این ها نگه دارنده رنگ های هستند که یا به صورت مستقیم در این فایل تعریف شده اند یا اینکه در فایل Color.kt تعریف شده اند
  • AppTheme : این تابع مسئول اصلی عوض کردن تم برنامه ما است
  • قسمت کامنت شده : این قسمت برای Dynamic Color هستش که من این قسمت رو غیر فعال کردم و از یک کد ساده استفاده کردم که این کار تغییر رنگ رو انجام بده .
  • Dynamic Color :یعنی برنامه به صورت خودکار از رنگ‌های والپیپر گوشی کاربر استفاده می‌کنه تا رنگ‌های رابط کاربری خودش رو بسازه.

  • MaterialTheme : یک کامپوننت اصلی در Jetpack Compose هست که به ما این امکان رو می‌ده تا رنگ‌ها، تایپوگرافی (فونت‌ها)، و شکل‌ها (Shapeها) رو در کل اپلیکیشن یا یک بخش خاص از UI اعمال کنیم

پیاده‌سازی تم در MainActivity.kt

در ادامه کار میریم سراغ فایل MainActivity :

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            AppTheme {
                Column(
                    modifier = Modifier
                        .fillMaxSize()
                        .padding(30.dp)
                        .background(MaterialTheme.colorScheme.background)
                ) {
                    Box(
                        modifier = Modifier
                            .size(100.dp)
                            .padding(20.dp)
                            .background(
                                MaterialTheme.colorScheme.primary
                            )
                    ) {
                        Text(
                            text = "Hello!",
                            modifier = Modifier.size(100.dp)


                        )
                    }
                    Box(Modifier.size(100.dp)) {
                        Text(
                            text = "Word!",
                            modifier = Modifier
                                .size(100.dp)
                                .background(MaterialTheme.colorScheme.primary)
                        )
                    }
                }
            }
        }
    }
}

در این فایل من کد های پیش فرض رو پاک کردم و به این صورت ساده تغییر دادم که یک ستون و دوتا box دارم

در این جا ما تابع AppTheme رو میبینم که میشه همون تابعی که در فایل تم در پایین صفحه بود که مسئول عوض کردن تم بود ، این تابع باید درداخل SetContent قرار بگیره بعد طرح کلی برنامه در داخل این تابع AppTheme قرار میگیره ، اگر دقت کنی ، در داخل این تابع من یه ستون دارم که برای Background اون این دستور رو استفاده کرده ام ،

MaterialTheme.colorScheme.primary

این دستور میگه برای رنگ پس زمینه Background   این نما View برو از سیستم متریال تم ، از ساختار رنگ ها ، رنگ پس زمینه رو برای ما انتخاب کن و در ویو مورد نظر اعمال کن .

این میشه کلیات کار با تم ها که اگه گوشی روی حالت شب یا روز تغییر کنه و اگه این تیکه کد برای هر پیس زمینه ای از ویو های ست بشن ، اون ویو تغییر رنگ میده.

 

معرفی فایل ColorScheme.kt

در پایان دوست دارم این فایل ColorScheme معرفی کنم

اگه دکمه‌ی Ctrl رو نگه داری و روی colorScheme کلیک کنی، می‌ری داخل یه فایلی به اسم ColorScheme.kt.
این فایل بهمون نشون می‌ده که هر رنگ قراره کجاها توی اپلیکیشن استفاده بشه. یعنی می‌گه مثلاً رنگ primary بیشتر برای چی کاربرد داره، یا error کجاها باید نمایش داده بشه.

وقتی بری بالاتر توی این فایل و یکم اسکرول کنی، یه سری توضیحات برات نوشته که دقیقاً همین چیزا رو روشن می‌کنه.

نکات تکمیلی برای طراحی تم حرفه‌ای

در ادامه ،

  • انتخاب رنگ های مناسب برای هر قسمت برنامه
  • اموزش استفاده از سایت طراحی تم های متریال استاندارد
  • انتخاب جفت رنگ های مکمل هم دیگه
  • انتخاب رنگ های متضاد
  • درست کردن تم های استاندارد
  • درست کردن پالت های تم برای هر رنگ و تصویر

این موارد رو در این مقاله با عنوان استفاده از Materail Theme Builder توضیح دادم که در درست کردن تم ها حرفه ای بشی و بتونی ، شکل برنامه ات رو به صورت خیلی جذاب جلوه بدی .

ممنون که این مطلب رو تا این جا مطالعه کردید🤗 ، از مسیر کد زدن لذت ببرید 🥰

دیدگاه‌ها ۰
ارسال دیدگاه جدید