جستجو برای:
سبد خرید 0
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
ورود
گذرواژه خود را فراموش کرده اید؟
عضویت

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

ارسال مجدد کد یکبار مصرف (00:60)
  • 02188945907
  • info@amooznegar.com
  • لیست علاقه مندی ها
آکادمی آموزنگار
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0

وبلاگ

آکادمی آموزنگار > اخبار > برنامه نویسی > اندروید > jetpack compose > آموزش کار با Jetpack Compose در اندروید

آموزش کار با Jetpack Compose در اندروید

1400-07-08
ارسال شده توسط آموزنگار
jetpack compose
آموزش کار با Jetpack Compose در اندروید

در این آموزش یاد می گیرید که چگونه از  UI Framework جدید ، Jetpack Compose  که توسط تیم برنامه نویسی اندروید مانند کتاب آموزش آشپزی توسعه یافته است چگونه استفاده کنید.

نوآوری توسعه نرم افزار تلفن همراه ، اغلب در فراز و نشیب هایی بوده. این که آیا روند فعلی مربوط به ایمنی و پایداری زبان یا بهبود عملکرد پلتفرم است و همیشه مهم است که از trend ها پیروی کنیم ، زیرا برخی از آنها نحوه توسعه برنامه ها را به طور اساسی تغییر می دهد. یکی دو سال گذشته همه چیز در مورد ایجاد برنامه نویسی واکنش گرا منطق تجاری برنامه ها بوده است.

این بدان معناست که مردم از روش کلاسیک MVC/P (Model-View- Controller/Presenter) به روشی دیگر مانند MVVM (Model-View-ViewModel) که شما data streams ها را درون ViewModel به روز رسانی می کنید و UI با تغییر دوباره یا به روز رسانی بخش های رابط کاربری ((UI به تغییر واکنش نشان می دهد. این تغییر به این دلیل اتفاق افتاده است که برنامه نویسی اعلانی (declarative) کمتر مستعد خطا ، راحت تر آزمایش می شود زیرا بیشتر با مقادیر داده ها کار می کنید تا تعاملات.

MVVM با جت پک کامپوز

MVVM با JetPack

با چنین روندی ، طبیعی است که ایجاد فریم ورک های (frameworks) رابط کاربری و ابزارهای اعلان ( declarative) کننده رابط کاربری به این سمت تغییر کرده باشد. مجموعه ابزارها و  فریمورک هایی (framework)  مانند React.js و Flutter روز به روز محبوبیت بیشتری پیدا کرده اند و این باعث شده است که سایر سیستم عامل ها با استفاده از همین رویکرد پیاده سازی شوند.

در Google I/O 2019  ، گوگل ابتدا Jetpack Compose را معرفی کرد. Jetpack Compose پاسخ گوگل به روند فریم ورک رابط کاربری (UI framework) اعلامی (declarative) است ، که تیم اندروید در حال توسعه آن است تا نحوه ایجاد رابط کاربری (UI) توسعه دهندگان را به طور اساسی تغییر دهد که کدها را آسان تر و سریع تر بنویسند که باعث می شود سرعت اجرا را بیشتر شود . این بخشی از مجموعه کتابخانه های Jetpack است و به همین دلیل باید با نسخه های پلتفرم سازگاری داشته باشد و نیازی به اجتناب از برخی ویژگی ها را ندارد زیرا از دستگاه های رده پایین یا نسخه های قدیمی تر Android را پشتیبانی می کند.

اگرچه هنوز Compose تازه معرفی شده است ، Compose در حال حاضر موج بزرگی را در جامعه اندرویدی ایجاد کرده است. اگر می خواهید از آخرین و جدیدترین خبر های فناوری به روز باشید ، ادامه مطلب را بخوانید!

در این آموزش ، شما با مفاهیم اولیه Jetpack Compose ، مانند توابع ترکیب پذیر (composable functions) ، تنظیم محتوا روی صفحه و به روز رسانی محتوا آشنا خواهید شد. پس از تسلط بر اصول اولیه ، می توانید از Jetpack Compose برای ساخت یک برنامه کتاب آشپزی استفاده کنید ، که یک فهرست مواد غذایی با طراحی مواد , با کارت‌ها , تصاویر و متن را نشان می‌دهد.

نکته : Compose به دلیل اینکه تازه معرفی شده است . نباید از آن در برنامه های درحال تولید استفاده کنید ، زیرا ممکن است کد تان بعدا تغییر کند و احتمالاً کد شما را خراب کند.

چرا از Jetpack Compose در ایجاد رابط کاربری استفاده بکنیم؟

قبل از نوشتن اولین برنامه خود با Compose ، توجه کنید که چرا تیم اندروید این کتابخانه را نوشته است.

Jetpack Compose در ایجاد رابط کاربری

کامپوز سه مزیت بزرگ نسبت به ساخت UI فعلی در Android دارد.

1. اعلامی(Declarative) است :

Jetpack Compose یک فریم ورک Framework) UI) اعلان کننده (declarative) است ، به این معنی است که شما دیدگاه خود را بدون اتکا به جهش و مفاهیم برنامه‌نویسی الزامی سنتی توصیف می‌کنید.

به عنوان مثال، با استفاده از جعبه‌ابزار رابط کاربری (UI toolkit) فعلی , شما معمولا ً از یک روش مثل () findViewById  برای رسیدن به نمایشی که می‌خواهید پنهان کنید استفاده می‌کنید , سپس () setVisibility را بر روی آن فراخوانی کنید .

در یک رابط کاربری(UI) اعلانی (declarative) ، شما در عوض UI را بصورت قابل مشاهده یا نامشخص توصیف می کنید و هنگامی که می خواهید ویژگی visibility را تغییر دهید کافیست کد UI را دوباره اجرا کنید.

بنابراین دیگر پس از ایجاد View ، مرجعی از آن دریافت نمی کنید. در عوض ، فقط کدی را که View را با پارامترهای مختلف ایجاد کرده دوباره اجرا کنید.

نکته : وقتی چیزی را به روزرسانی می کنید ،  Composeدر واقع کل نمای آن را بازسازی نمی کند. چون به اندازه کافی هوشمند است که فقط قسمتی را که باید تغییر کند را تغییر دهد.

2. مستقل است :

Compose کتابخانه ای است که به سیستم عامل وابسته نیست. این یک مزیت بزرگ برای برنامه نویسان است.

در حال حاضر ، اگر گوگل بخواهد کامپوننت(component)LinearLayout  را به روز رسانی کند ، باید نسخه جدیدی از سیستم عامل را منتشر کند. متأسفانه ، مسائل مربوط به fragmentation مانع استفاده بسیاری از افراد از آخرین نسخه های اندروید می شود.

این به این معنی است که تا سالها پس از انتشار و ارتقاء سطح علمی بیشتر افراد ، نمی توانید به دسترسی کاربران به ویژگی های جدید مجموعه ابزار واسط کاربری ( UI toolkit ) فعلی اعتماد کنید.

با Jetpack Compose ، توسعه دهندگان می توانند ویژگی های جدیدی را بدون تغییر نسخه سیستم عامل اضافه کنند. یعنی بدون در نظر گرفتن سیستم عامل دستگاه کاربر ، می توانید تغییرات را ایجاد وبه آن اعتماد کنید.

علاوه بر این ، برخلاف component LinearLayout ، انتشار نسخه های جدید Jetpack Compose برنامه های موجود را خراب نمی کند ، زیرا مگر اینکه بخواهید مجبور به ارتقاء به نسخه جدیدتر Jetpack Compose باشید . همچنین از مجموعه ابزار رابط کاربری (UI toolkit) موجود از اندروید استفاده نمی کند ، بنابراین یک شروع تازه است ، که فرصتی را برای رفع برخی از مشکلات قدیمی سلسله مراتب View رافراهم می کند. در حالی که به محض ارتقاء به نسخه جدید اندروید ، component LinearLayout ، که بخشی از سیستم عامل است ، نیز ارتقا یافته است و ممکن است تغییرات فاحشی در برنامه های وابسته به آن ایجاد شود.

3. ترکیب پذیر است (Composable) :

کتابخانه Compose به گونه ای ساخته شده است که می توانید رابط کاربری ((UI خود را در اجزای کوچک و قابل استفاده مجدد و نه در سطح Fragment یا Activity بسازید. این ترکیب پذیری (composability) ، باعث استفاده مجدد و افزایش خوانایی کد می شود.

اندروید بیش از ده سال است که فعال است و کد ایجاد رابط کاربری آن سن خود را نشان می دهد. کلاس View به تنهایی شامل بیش از ده هزار خط کد است! این تعداد کد زیاد قدیمی برای پشتیبانی است.

– برای شروع Jetpack Compose :

برای بهترین تجربه توسعه با Jetpack Compose ، باید آخرین نسخه Canary Android Studio Preview را بارگیری کنید. دلیل این امر این است که وقتی از Android Studio برای توسعه برنامه خود با Jetpack Compose استفاده می کنید ، می توانید از ویژگی های ویرایشگر هوشمند مانند الگوهای پروژه جدید و قابلیت پیش نمایش فوری رابط کاربری (UI) نوشتن خود بهره مند شوید. شما دو انتخاب دارید: Android Studio موجود خود را به نسخه Canary ارتقا دهید یا نسخه Canary را دانلود کنید.

برای تعویض به کانال Canary برای به روز رسانی‌ها، به باکس Check for Updates بروید و روی Configure در گوشه سمت چپ دیالوگ باکس کلیک کنید.

در مرحله بعد ، در قسمت پیکربندی صفحه تنظیمات ، کانال Canary را انتخاب کنید.

ورژن Canary اندروید استودیو

روی OK کلیک کنید و دوباره Check for Updates را بزنید. پیغامی برای نصب نسخه Canary Android Studio مشاهده خواهید کرد.

نسخه جدید را نصب کنید. می دانید که از نسخه Canary استفاده می کنید زیرا آیکون Android Studio زرد است.

آیکن اندروید استودیو

اکنون که Android Studio نسخه Canary را نصب کرده اید ، وقت آن است که وارد Jetpack Compose شوید!

– راه اندازی و اجرا با Jetpack Compose :

یک پروژه بسازید و آن را در نسخه Canary Android Studio خود اجراکنید.

سپس یک صفحه سفید سفید با متن Hello World مشاهده خواهید کرد.

پروژه اندروید jetpack compose

حالا فایل app/build.gradle را باز کرده و به قسمت dependencies نگاه کنید. چهار dependency جالب را مشاهده خواهید کرد:

1
2
3
4
5
6
def composeVersion = "1.0.0-alpha06"
...
implementation "androidx.compose.ui:ui:$composeVersion"
implementation "androidx.compose.foundation:foundation:$composeVersion"
implementation "androidx.ui:ui-tooling:$composeVersion"
implementation "androidx.compose.material:material:$composeVersion"

Compose فقط یک کتابخانه نیست که وارد می کنید ، شامل مجموعه ای از کتابخانه های مختلف برای ساختارهای مختلف رابط کاربری است که ممکن است بخواهید از آنها استفاده کنید. در این پروژه ، شما از بلاک های اساسی مورد نیاز برای ایجاد یک طرح اولیه استفاده می کنید.

علاوه بر این وابستگی ها ، می توانید ببینید که Compose ، True  ست شده است در buildfeatures در بلاک  android  :

1
2
3
buildFeatures {
  compose true
}

اکنون که یاد گرفته اید برای پروژه اولیه Jetpack Compose به چه وابستگی هایی نیاز دارید ، می توانید دست به کار شوید.

– توضیحات بیشتر در مورد JetPack Compose :

از آنجا که Jetpack Compose یک روش برنامه نویسی برای ایجاد رابط کاربری قرار می دهد ، از هیچ XML استفاده نخواهید کرد. این به این معنی است که شما دیگر از متد () setContentView در کدتان استفاده نخواهید کرد ، در عوض از متد () setContent برای تنظیم رابط کاربری خود استفاده خواهید کرد.

ساخت پروژه جدید Jetpack Compose در اندروید استودیو
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

برای انجام این کار ، MainActivity.kt را باز کرده و  به جای متد () setContentView عبارت زیر راجایگزین کنید:

1
2
3
setContent {
  Text("Hello, World!")
}

اطمینان حاصل کنید که وابستگی ها از پکیج androidx.compose وارد شده باشد.() setContent یک متد Kotlin در Activity است که یک @Composable را به عنوان پارامتر از نوع lambda  در نظر می گیرد. بعداً بیشتر با معنی@Composable آشنا خواهید شد.

علاوه بر متد setContent ()، متد دیگری در قطعه کد بالا وجود دارد: متد ()   Text.

در Jetpack Compose ، از روش هایی استفاده می کنید که با حاشیه نویسیComposable@ مشخص شده اند تا رابط کاربری خود را بسازید. اگر Command-Click روی Mac یا Control-click روی Windows را برروی متد () Text  را فشار دهید ، چیزی شبیه به این را مشاهده خواهید کرد:

1
2
3
4
@Composable
fun Text(
    ...
)

()Text در واقع متدی است که با حاشیه نویسیComposable مشخص شده است. حدس زده اید که

متد  Composable  Text() وظیفه ترسیم متن روی صفحه را بر عهده دارد. شما می توانید آن را به عنوان TextView  نسخه Compose در نظر بگیرید.

نکته : به طور معمول هنگام نامگذاری متد ها از روش camelCase استفاده می کنید. با این حال ، هنگام ایجاد composables ، نام متد را بزرگ می کنید ، بنابراین واضح است که در حال ساخت نمونه ای از composable هستید. مشابه نحوه عملکرد ویجت های Flutter یا عملکردهای Kotlin Coroutine مانند متد  ()Job  نامگذاری شده است.

دوبارهBuild  و Run کنید و  ()Text  را روی صفحه خواهید دید!

composable  در جت پک کامپوز

می توانید متن خود را با استفاده از TextStyle سفارشی (customize ) کنید. با جایگزین کردن ()Text

زیر ، آن را امتحان کنید:

1
Text ("Hello, World!", style = TextStyle(color = Color.Red))

بار دیگر ، بسته های مناسب androidx.ui را  importکنید.

دوبارهBuild  و Run کنید و خواهید دید که متن اکنون قرمز شده است.

دستور Text در جت پک کامپوز

هنگام استفاده از Jetpack Compose ، برای سفارشی (customize) سازی رابط کاربری () خود به جای استایل ها و ویژگی های XML از آرگومان های معمولی کد و متد Kotlin استفاده می کنید. شما در قسمت بعدی خود را در این مورد امتحان خواهید کرد.

ایجاد یک متد Composable

یکی از مهم ترین مزایای Jetpack Compose این است که شما رابط کاربری(UI ) خود را به صورت Modular  با تعداد زیادی عملکرد کوچک و استفاده نکردن از یک فایل XML برای هر Activity می سازید.

اکنون که با () Text آشنا شدید ، می توانید اولین متد Composable@ ایجاد کنید.

متد زیر را در زیر MainActivity اضافه کنید:

1
2
3
4
@Composable
fun Greeting() {
  Text("Hello, World!", style = TextStyle(color = Color.Red))
}

تبریک می گوییم ، شما تازه اولین Composable سفارشی خود را ایجاد کرده اید!

برای استفاده از آن ، فراخوانی ()Text در () setContent را با فراخوانی به () Greeting جایگزین کنید:

1
2
3
setContent {
  Greeting()
}

و زمانی کد را اجرا می کنید. مانند گذشته ، متن قرمز خیره کننده خود را خواهید دید!

متد setContent در اندروید

استفاده از توابع کوچک یک راه عالی برای ایجاد چند لایه واسط کاربر است که می‌توانید دوباره بر روی صفحات مختلف استفاده کنید .

با این حال ، یک نکته را باید در نظر داشت که شما فقط می توانید یک تابع Composable@ را از داخل یک تابع دیگرComposable@ فراخوانی کنید. در غیر این صورت ، برنامه شما به مشکل بر می خورد.

این شبیه به Kotlin Coroutines است ، جایی که فقط می توانید توابع تعلیق شده را از سایر توابع تعلیق شده یا coroutines فراخوانی کنید.

پیش نمایش یک Composable

به طور معمول ، هنگامی که رابط کاربری (UI) را برای یکی از activity خود در XML ایجاد می کنید ، شما از پیش نمایش طرح استفاده می کنید تا ببینید نمای شما بدون نیاز به ساخت و اجرای برنامه چگونه خواهد بود.

Jetpack Compose دارای یک ابزار مشابه است.

اضافه کردن Preview@ در زیر @Composable و روی Greeting@ که قبلا تعریف کردید:

1
2
3
4
5
@Composable
@Preview
fun Greeting() {
  Text("Hello, World!", style = TextStyle(color = Color.Red))
}

پس از وارد کردن حاشیه نویسی ها (annotation) ، پیش نمایش Composable ها را در سمت راست صفحه مشاهده خواهید کرد.

پیش نمایش Composable

هر بار که Composable را در پیش نمایش به روز رسانی می کنید ، برای مشاهده نمای به روز شده باید پروژه را یک بار build  کنید. فقط شما می توانید Composable هایی را که هیچ استدلالی ندارند ، در پیش نمایش ، نمایش دهید.

اکنون که می توانید اجزای (components) خود را در پیش نمایش ، نمایش دهید ، وقت آن است که نحوه کار با layout ها را بیاموزید.

استفاده از Composable در بیرون از  Composable دیگر:

داشتن تنها یک متن روی صفحه برنامه قابل توجه نیست . با این حال ، داشتن سه متن روی صفحه باید یک تجربه کاملاً جذاب را ایجاد کند! :]

برای نمایش سه متن () Text در () Greeting باید 3 بار متد Text() فراخوانی کنید :

1
2
3
Text("Hello, World!", style = TextStyle(color = Color.Red))
Text("Hello, Second World!", style = TextStyle(color = Color.Red))
Text("Hello, Third World!", style = TextStyle(color = Color.Red))

به نظر شما این ترکیب Composable چگونه به نظر می رسد؟ برنامه را دوباره اجرا کنید و در پنجره پیش نمایش نگاهی بی اندازید تا ببینید آیا نتایج با انتظارات شما مطابقت دارد یا خیر.

ترکیب Composable

هیچ چیزی موقعیت قرارگیری کنترل های Text را کنترل نمی کند ، بنابراین همه آنها طوری روی هم قرار می گیرند که انگار در FrameLayout نمایش داده می شوند . خوشبختانه ، Jetpack Compose مجموعه بزرگی از Composable های Layout را ارائه می دهد.

در این حالت ، از  Column Composable برای ایجاد نظم در این آشفتگی استفاده خواهید کرد.

استفاده از Column Composable

یک ستون را به عنوان یک LinearLayout با جهت عمودی در نظر بگیرید. به سادگی تمام ترکیبات فرزند خود را در یک ستون عمودی قرار می دهد.

متد ()Greeting  را برای قرار دادن سه () Text در یک ()Column به روزرسانی کنید:

1
2
3
4
5
6
7
8
9
@Composable
@Preview
fun Greeting() {
  Column {
    Text("Hello, World!", style = TextStyle(color = Color.Red))
    Text("Hello, Second World!", style = TextStyle(color = Color.Red))
    Text("Hello, Third World!", style = TextStyle(color = Color.Red))
  }
}

()Column  یک بلاک lambdaComposable می گیرد ، جایی که شما فرزندان Column را اعلام (declare ) می کنید.

در Greeting ( ) , شما سه کلاس را به عنوان این ستون‌ها اضافه می‌کنید . این الگو داشتن تابع composable یک lambda برای ایجاد توابع composable دیگر در jetpack Compose مشترک است . حتی ممکن است بگویید این چیزی است که کل ایده از آن تشکیل شده‌است .

برنامه را دوباره اجرا کنید و خواهید دید که اکنون سه متن را در یک ستون عمودی قرار داده اید. خیلی بهتر!

lambdaComposable  در کامپوز اندروید

علاوه بر ()Column  ، می توانید از () Row  برای نمایش دادن متن ها  در یک ردیف افقی استفاده کنید. این شبیه به یک LinearLayout با جهت افقی است.

به جای ساختن متن های قرمز ساده ، می خواهید یک برنامه آشپزی به نام ComposableCookBook بسازید که لیستی از دستور العمل های خوشمزه را نمایش می دهد. این پروژه دارای یک دستور العمل از پیش تعریف شده است:

1
2
3
4
5
data class Recipe(
  @DrawableRes val imageResource: Int,
  val title: String,
  val ingredients: List<String>
)

طرز تهیه یک تصویر , یک لیستی از مواد اولیه است . این برنامه همچنین دارای لیست پیش فرض دستور العمل ها در Recipes.kt است. از این لیست دستور العمل ها برای ساختن برنامه کتاب آشپزی خود استفاده خواهید کرد.

ایجاد دستور العمل Composable

هدف شما این است که از Jetpack Compose استفاده کنید تا دستور العمل های برنامه ComposeCookbook بهتر به نظر برسد ، با ایجاد یک UI که هر دستور غذا را در یک کارت با تصویر دستور در بالای کارت و لیستی از مواد زیر آن نشان می دهد.

اولین قدم شما ایجاد یک composable  است که دستور العمل فردی را نشان می دهد .

روی بسته ComposableCookBook راست کلیک کرده و New -> New Kotlin File/Class را انتخاب کنید. سپس File را از لیست انتخاب کرده و نام RecipeCard را تایپ کنید. در نهایت ، به روش Composable ،() RecipeCard  را که در زیر نشان داده شده است ، اضافه کنید:

1
2
3
4
@Composable
fun RecipeCard(recipe: Recipe) {
  Text(recipe.title)
}

در حال حاضر ، این فقط عنوان دستور غذا را با استفاده از () Text نشان می دهد.

از آنجا که() RecipeCard  یک پارامتر می گیرد ، نمی توانید از Preview@ استفاده کنید. با این حال ، می توانید یک روش ترکیبی (Composable) دیگر ایجاد کنید که یک ()RecipeCard پیش فرض  را ارائه می دهد را اضافه کنید:

1
2
3
4
5
@Composable
@Preview
fun DefaultRecipeCard() {
  RecipeCard(defaultRecipes[0])
}

اکنون می توانید ()RecipeCard  را پیش نمایش کنید.

Preview در کامپوز

در مرحله بعد ، شما تصویری را به () RecipeCard ، بالای عنوان اضافه می کنید.

افزودن تصویر به RecipeCard

محتوای () RecipeCard را با موارد زیر جایگزین کنید:

1
2
3
4
5
6
7
8
// 1
val image = imageResource(recipe.imageResource)
// 2
Column(modifier = Modifier.fillMaxWidth()) {
  // 3
  Image(asset = image, contentScale = ContentScale.Crop, modifier = Modifier.fillMaxWidth().height(144.dp))
  Text(recipe.title)
}

اطمینان حاصل کنید که همه توابعی را که ممکن است به عنوان مرجع ناشناخته شده به رنگ قرمز علامت گذاری شوند را وارد کنید.انگار برای چنین تکه کد کوچکی ،جادویی رخ داده! سپس در صورت نیاز قسمت پیش نمایش (preview) را بازخوانی (refresh) کنید.

در اینجا یک تفکیک وجود دارد:

1. هر دستور غذا دارای یک منبع تصویر است که به Drawable اشاره می کند. به طور معمول ، می توانید drawable را روی ImageView تنظیم کنید یا از Context برای دریافت نمونه Drawable استفاده کنید.

کامپوننت های رابط کاربری اندروید Jetpack
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

در Jetpack Compose ، از مکانیسم متفاوتی برای بدست آوردن تصویر استفاده می کند. این خط به Jetpack Compose می گوید که یک تصویر را با استفاده از یک شناسه (id) از منبع drawable دریافت کند.

2. در مرحله بعد ، از  Column @Composable که قبلاً یاد گرفته اید استفاده می کنید تا محتویات کارت دستور خود را در یک طرح عمودی قرار دهید. در حالت ایده آل ، تصاویر مرتبط با دستور غذا باید عرض تصویر به صورت کامل باشند ، بنابراین از یک اصلاح کننده (Modifiers) استفاده می کنیم تا به این ستون بگوییم تا عرض تصویر را به صورت کامل درآور.

اصلاح کننده ها (Modifiers)  به شما امکان می دهند که رابط کاربری (UI) یک کامپوزیت را تنظیم کنید. در غیر از این سناریو ، شما از یک اصلاح کننده (Modifiers)  برای کنترل اندازه ستون استفاده می کنید.

می توانید از اصلاح کننده ها (Modifiers)  در موارد بیشتری استفاده کنید ، از جمله تغییر اندازه ی composable ها یا اعمال تغییر اندازه نسبت به ابعاد.

3. در نهایت ، شما از متد() Image برای نمایش تصویر استفاده می کنید و از تصویری که در اولین مرحله بازیابی کرده عبور کردین. درست مانند کلاس ImageView که می شناسید و دوست دارید ، می توانید مقیاس محتوا ، عرض و ارتفاع یک تصویر را تنظیم کنید. برای انجام این کار ، از  Modifier)) برای تنظیم عرض و ارتفاع تصویر و argumnet contentScale برای تنظیم مقیاس محتوا استفاده می کنید.

پیش نمایش را تازه کنید و خواهید دید که  recipe cardشما شروع به شکل گرفتن می کند!

دستور Image در کامپوز

این رامن (اسم غذا) بسیار خوشمزه به نظر می رسد – اما برای پخت آن به چه موادی نیاز دارید؟ برای کار بعدی خود ، یک لیست مواد غذایی تشکیل  دهید.

فهرست بندی مواد تشکیل دهنده

برای فهرست بندی مواد غذایی تشکیل دهنده ، از ()Text خود استفاده می کنید. از آنجا که قبلاً () Column را در مرحله قبل تعریف کرده اید ، افزودن اجزای آن آسان خواهد بود.

متن زیر را که عنوان دستور غذا را کشیده است ، در زیر اضافه کنید:

1
2
3
for (ingredient in recipe.ingredients) {
  Text(ingredient)
}

یکی از نکات جالب در مورد Jetpack Compose این است که می توانید از کد معمولی Kotlin برای بیان جزئیات رابط کاربری (UI) کمی پیچیده تر استفاده کنید.

در کد بالا ، از یک حلقه for برای فهرست تمام اجزای Text استفاده شده است. اگر رابط کاربری (UI) را بازسازی کنید ، تمام مواد تشکیل دهنده این غذای خوشمزه را در زیر عنوان مشاهده خواهید کرد. خیلی باحاله ، درسته؟ و نیازی به تعریف RecyclerView.Adapter یا هر ViewHolders ندارید!

لیست ها در کامپوز

این رامن خوشمزه به نظر می رسد ، اما recipe card به خودی خود بسیار مربع به نظر می رسد. در مرحله بعد ، گوشه های گرد را به recipe card اضافه می کنید تا زیبا تر شود.

گرد کردن گوشه های RecipeCard

استفاده از متد ()Surface  به شما این امکان را می دهد که گوشه های آیتم مورد خود را گرد کنید. محتویات موجود ()RecipeCard را با موارد زیر جایگزین کنید:

1
2
3
4
5
6
7
8
9
10
Surface(shape = RoundedCornerShape(8.dp), elevation = 8.dp) {
  val image = imageResource(recipe.imageResource)
  Column(modifier = Modifier.fillMaxWidth()) {
    Image(asset = image, contentScale = ContentScale.Crop, modifier = Modifier.fillMaxWidth().height(144.dp))
    Text(recipe.title)
    for (ingredient in recipe.ingredients) {
      Text("• $ingredient")
    }
  }
}

Surface () رسم اشکال و ارائه ارتفاع یک جزء (component) را مدیریت می کند برای recipe card استفاده شده است از یک ()Surface  با () RoundedCornerShape و ارتفاع 8 dp.

ساختار (Build) را تازه کنید اکنون پیش نمایش باید یک کارت گرد نشان دهد!

Surface در کامپوز

card در حال شکل گیری است ، اما دو چیز را از دست خواهد داد : جزئی از style اصلی کامپوننت عنوان و مقداری paddingبین عناصر (elements). که در مرحله بعد به آن رسیدگی خواهید شد.

بهبود ظاهر Recipe Card

با افزودن یک style متن در داخل دستور recipe  درمتد () Text شروع کنید:

1
Text(recipe.title, style = MaterialTheme.typography.h4)

در اینجا ، از پارامتر style برای استایل دادن به متن هدر خود با style پیش فرض Material Theme استفاده کنید.

پارامتر style برای استایل دادن

افزودن Padding به Recipe Card

برای افزودن Padding به Recipe Card ، عنوان و جزئیات Text () را در یک () Column دیگر و modifier زیر را به کدتان اضافه کنید:

1
2
3
4
5
6
Column(modifier = Modifier.padding(16.dp)) {
  Text(recipe.title, style = MaterialTheme.typography.h4)
  for (ingredient in recipe.ingredients) {
    Text("• $ingredient")
  }
}

علاوه بر استفاده از اصلاح کننده ها برای کنترل عرض و ارتفاع ، می توانید از آنها برای افزودن padding@ به  Composables@ های مختلف نیز استفاده کنید.

بازسازی پیش نمایش شما باید یک Recipe Card زیبا ببینید:

modifier در جت پک کامپوز

Recipe Card شما اکنون عالی به نظر می رسد. زمان آن فرا رسیده است که به کاربران خود این امکان را بدهید تا فهرستی از Recipe های مورد علاقه خود تهیه کنند.

ایجاد لیستی از Recipe

به طور معمول ، برای تهیه یک لیست ، باید از چیزی مانند RecyclerView استفاده کنید. در Jetpack Compose ، می توانید از LazyColumn در @Composable برای دستیابی به یک لیست پیمایشی از موارد فوری درست نمایید و مانند RecyclerView استفاده کنید.

برای شروع جمع آوری دستور العمل های لیست خود ، یکبار دیگر روی پکیج کد اصلی راست کلیک کرده و New -> New Kotlin File/Class را انتخاب کنید. سپس File را از لیست انتخاب کرده و نام RecipeList را تایپ کنید. در نهایت ، متد () RecipeList  را به فایل اضافه کنید:

1
2
3
4
5
6
@Composable
fun RecipeList(recipes: List<Recipe>) {
  LazyColumnFor(items = recipes) { item ->
    RecipeCard(item)
  }
}

اطمینان حاصل کنید که reference های از دست رفته را import کنید. LazyColumn لیستی از موارد و یک lambdaComposable را می پذیرد که یک آرگومان می گیرد یک مورد آیتم در لیست شما. سپس می توانید از آن مورد برای ایجاد لیست پیمایش خود استفاده کنید. هیچ ViewHolders یا Adapter در اینجا یافت نمی شود!

اکنون که شما یک دستور Composable برای نشان دادن لیست دستور العمل های خود دارید ، وقت آن است که همه چیز را در کلاس MainActivity خود قرار دهید و کار سخت خود را روی یک دستگاه ببینید!

راه اندازی همه چیز چگونه اتفاق می افتد

به MainActivity  بروید و محتویات  () Content را با موارد زیر جایگزین کنید:

1
RecipeList(defaultRecipes)

برنامه را دوباره اجرا کنید. که لیستی از غذاهای خوشمزه را مشاهده خواهید کرد.

این برنامه خوب به نظر می رسد ، اما شما واقعاً نمی توانید recipe cards های تکی را متمایز کنید. برای متمایز کردن این UI ، باید مقداری Padding بین موارد اضافه کنید.

فایل Recipe Card را دوباره باز کنید و عملکرد RecipeCard را به روز کنید تا تغییرات در Surface شما منتقل شود:

LazyColumn در جت پک کامپوز
1
2
3
4
5
fun RecipeCard(recipe: Recipe, modifier: Modifier) {
  Surface(shape = RoundedCornerShape(8.dp), elevation = 8.dp, modifier = modifier) {
  ...
  }
}

سپس روش پیش‌نمایش DefaultRecipeCard را برای گذر از یک اصلاح کننده به روز رسانی کنید :

1
2
3
4
5
@Composable
@Preview
fun DefaultRecipeCard() {
  RecipeCard(defaultRecipes[0], Modifier.padding(16.dp))
}

بعد از آن , فایل RecipeList را باز کنید و یک  padding به اندازه 8 dp را به اصلاح کننده (modifier) اضافه کنید . روش RecipeList باید به این شکل باشد :

1
2
3
4
5
6
@Composable
fun RecipeList(recipes: List<Recipe>) {
  LazyColumnFor(items = recipes) { item ->
    RecipeCard(item, Modifier.padding(16.dp))
  }
}

دوباره برنامه را اجرا کنید . شما باید یک لیست مرتب از مواد غذایی خوش‌مزه را ببینید .

لیست ها در جت پک کامپوز

تنها چیزی که اکنون در برنامه وجود ندارد یک نوار ابزار (Toolbar) است! شماToolbar را به عنوان آخرین مرحله اضافه خواهید کرد .

اضافه کردن نوارابزار (Toolbar)

داشتن نوار ابزار ، رفتار پیش‌فرض برنامه‌های اندروید است ، بنابراین مهم است که آن را در بر داشته باشد . محتویات () setContent را در فایل MainActivity با موارد زیر جایگزین کنید :

1
2
3
4
5
6
7
8
9
// 1
Column(modifier = Modifier.fillMaxSize()) {
  // 2
  TopAppBar(title = {
    Text("ComposableCookBook")
  })
  // 3
  RecipeList(defaultRecipes)
}

در اینجا تفکیک کد آمده است:

1. درست مانند قبل از اینکه از یک ستون استفاده کنید , اما این بار شما به آن می‌گویید که تمام فاصله‌گذاری موجود را با مشخص کردن یک اصلاح‌کننده (Modifier) با () fillMaxSize پر کنید .

2. سپس از TopAppBar @Composable برای افزودن نوار ابزار استفاده می کنید. توجه داشته باشید که به جای گذراندن یک رشته به نوار ابزار ، یک Composable@ دیگر ارسال می کنید. این به شما کنترل بسیار زیادی بر نحوه نمایش محتوا در نوار ابزار می دهد! برای این برنامه ، یک متن ساده برای محتوای نوار ابزار شما کافی است.

3. در نهایت ، شما RecipeList خود را به ستون اضافه می کنید تا در زیر TopAppBar قرار گیرد.

دوباره  Buildوrun  کنید و یک نوار ابزار جدید و شیک در بالای ComposeableCookBook خواهید دید.

TopAppBar در جت پک کامپوز

تبریک می گویم! شما اولین برنامه خود را با استفاده از Jetpack Compose ساخته اید.

از اینجا کجا بریم؟

شما اکنون برخی از جدیدترین و بزرگترین تغییرات را در دنیای UI در Android تجربه کرده اید. اما شما فقط آنچه Compose به صورت مبتدی ارائه می دهد را یاد گرفته اید و بسیاری از این API ها قبل از اینکه این کتابخانه ثبات داشته باشد, به طور چشمگیری تغییر می‌کنند.

در این آموزش با موارد زیر آشنا شدید:

• فلسفه و انگیزه پشت Jetpack Compose.

• چگونه با استفاده از حاشیه‌نویسی composable@ یک composable بسازیم .

• نحوه پیش نمایش یک composable با استفاده از حاشیه نویسی@Preview.

• اصول کار کردن با استفاده از Column composable .

• چگونه با استفاده از MaterialThemes یک ظاهر طراحی شده به اجزای خود اضافه کنید.

قبلی زبان برنامه نویسی Dart
بعدی آموزش ساخت برنامه چت با Firebase Cloud Messaging

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
دسته‌ها
  • GoLang
  • jetpack compose
  • PHP
  • اپلیکیشن
  • امنیت
  • اندروید
  • اوپن سورس
  • برنامه نویسی
  • برنامه نویسی iOS
  • برنامه نویسی react native
  • پادکست صوتی
  • تکنولوژی
  • جاوا
  • طراح رابط کاربری
  • طراحی رابط کاربری
  • طراحی وب
  • عمومی
  • فریلنسر
  • فلاتر
  • فناوری
  • کاتلین
  • کتاب های آموزشی
  • کسب و کار
  • هوش مصنوعی
  • وردپرس
برچسب‌ها
admob coroutine dagger dagger-hilt jetpack nft rxandroid rxjava spring swift ارز دیجیتال امنیت در اندروید دارت فایربیس فوشیا مصاحبه کاری معماری mvi نقشه راه برنامه نویسی کاتلین گوگل

آکادمی آموزنگار، جایی برای آغاز یک سفر شگفت‌انگیز در دنیای برنامه‌نویسی است. آموزنگار تلاش می‌کند تا هر فردی را از هر سطحی از زندگی و تجربه به دنیای جذاب برنامه‌نویسی وارد کند.

دسترسی سریع
  • درباره ما
  • تماس با ما
  • حریم خصوصی
  • سوالات متداول
نمادها
شبکه های اجتماعی
Facebook Twitter Youtube icon--white Whatsapp

تهران، میدان ولی عصر،خیابان شهیدان سازش،کوچه سوم پلاک 5 طبقه سوم واحد 31

021-88945907

تمامی حقوق برای آکادمی آموزنگار محفوظ می باشد

اشتراک گذاری در شبکه های اجتماعی
ارسال به ایمیل
https://amooznegar.com/?p=11125
  • Afghanistan (+93)
  • Albania (+355)
  • Algeria (+213)
  • American Samoa (+1)
  • Andorra (+376)
  • Angola (+244)
  • Anguilla (+1)
  • Antigua (+1)
  • Argentina (+54)
  • Armenia (+374)
  • Aruba (+297)
  • Australia (+61)
  • Austria (+43)
  • Azerbaijan (+994)
  • Bahrain (+973)
  • Bangladesh (+880)
  • Barbados (+1)
  • Belarus (+375)
  • Belgium (+32)
  • Belize (+501)
  • Benin (+229)
  • Bermuda (+1)
  • Bhutan (+975)
  • Bolivia (+591)
  • Bonaire, Sint Eustatius and Saba (+599)
  • Bosnia and Herzegovina (+387)
  • Botswana (+267)
  • Brazil (+55)
  • British Indian Ocean Territory (+246)
  • British Virgin Islands (+1)
  • Brunei (+673)
  • Bulgaria (+359)
  • Burkina Faso (+226)
  • Burundi (+257)
  • Cambodia (+855)
  • Cameroon (+237)
  • Canada (+1)
  • Cape Verde (+238)
  • Cayman Islands (+1)
  • Central African Republic (+236)
  • Chad (+235)
  • Chile (+56)
  • China (+86)
  • Colombia (+57)
  • Comoros (+269)
  • Cook Islands (+682)
  • Côte d'Ivoire (+225)
  • Costa Rica (+506)
  • Croatia (+385)
  • Cuba (+53)
  • Curaçao (+599)
  • Cyprus (+357)
  • Czech Republic (+420)
  • Democratic Republic of the Congo (+243)
  • Denmark (+45)
  • Djibouti (+253)
  • Dominica (+1)
  • Dominican Republic (+1)
  • Ecuador (+593)
  • Egypt (+20)
  • El Salvador (+503)
  • Equatorial Guinea (+240)
  • Eritrea (+291)
  • Estonia (+372)
  • Ethiopia (+251)
  • Falkland Islands (+500)
  • Faroe Islands (+298)
  • Federated States of Micronesia (+691)
  • Fiji (+679)
  • Finland (+358)
  • France (+33)
  • French Guiana (+594)
  • French Polynesia (+689)
  • Gabon (+241)
  • Georgia (+995)
  • Germany (+49)
  • Ghana (+233)
  • Gibraltar (+350)
  • Greece (+30)
  • Greenland (+299)
  • Grenada (+1)
  • Guadeloupe (+590)
  • Guam (+1)
  • Guatemala (+502)
  • Guernsey (+44)
  • Guinea (+224)
  • Guinea-Bissau (+245)
  • Guyana (+592)
  • Haiti (+509)
  • Honduras (+504)
  • Hong Kong (+852)
  • Hungary (+36)
  • Iceland (+354)
  • India (+91)
  • Indonesia (+62)
  • Iran (+98)
  • Iraq (+964)
  • Ireland (+353)
  • Isle Of Man (+44)
  • Israel (+972)
  • Italy (+39)
  • Jamaica (+1)
  • Japan (+81)
  • Jersey (+44)
  • Jordan (+962)
  • Kazakhstan (+7)
  • Kenya (+254)
  • Kiribati (+686)
  • Kuwait (+965)
  • Kyrgyzstan (+996)
  • Laos (+856)
  • Latvia (+371)
  • Lebanon (+961)
  • Lesotho (+266)
  • Liberia (+231)
  • Libya (+218)
  • Liechtenstein (+423)
  • Lithuania (+370)
  • Luxembourg (+352)
  • Macau (+853)
  • Macedonia (+389)
  • Madagascar (+261)
  • Malawi (+265)
  • Malaysia (+60)
  • Maldives (+960)
  • Mali (+223)
  • Malta (+356)
  • Marshall Islands (+692)
  • Martinique (+596)
  • Mauritania (+222)
  • Mauritius (+230)
  • Mayotte (+262)
  • Mexico (+52)
  • Moldova (+373)
  • Monaco (+377)
  • Mongolia (+976)
  • Montenegro (+382)
  • Montserrat (+1)
  • Morocco (+212)
  • Mozambique (+258)
  • Myanmar (+95)
  • Namibia (+264)
  • Nauru (+674)
  • Nepal (+977)
  • Netherlands (+31)
  • New Caledonia (+687)
  • New Zealand (+64)
  • Nicaragua (+505)
  • Niger (+227)
  • Nigeria (+234)
  • Niue (+683)
  • Norfolk Island (+672)
  • North Korea (+850)
  • Northern Mariana Islands (+1)
  • Norway (+47)
  • Oman (+968)
  • Pakistan (+92)
  • Palau (+680)
  • Palestine (+970)
  • Panama (+507)
  • Papua New Guinea (+675)
  • Paraguay (+595)
  • Peru (+51)
  • Philippines (+63)
  • Poland (+48)
  • Portugal (+351)
  • Puerto Rico (+1)
  • Qatar (+974)
  • Republic of the Congo (+242)
  • Romania (+40)
  • Reunion (+262)
  • Russia (+7)
  • Rwanda (+250)
  • Saint Helena (+290)
  • Saint Kitts and Nevis (+1)
  • Saint Pierre and Miquelon (+508)
  • Saint Vincent and the Grenadines (+1)
  • Samoa (+685)
  • San Marino (+378)
  • Sao Tome and Principe (+239)
  • Saudi Arabia (+966)
  • Senegal (+221)
  • Serbia (+381)
  • Seychelles (+248)
  • Sierra Leone (+232)
  • Singapore (+65)
  • Sint Maarten (+1)
  • Slovakia (+421)
  • Slovenia (+386)
  • Solomon Islands (+677)
  • Somalia (+252)
  • South Africa (+27)
  • South Korea (+82)
  • South Sudan (+211)
  • Spain (+34)
  • Sri Lanka (+94)
  • St. Lucia (+1)
  • Sudan (+249)
  • Suriname (+597)
  • Swaziland (+268)
  • Sweden (+46)
  • Switzerland (+41)
  • Syria (+963)
  • Taiwan (+886)
  • Tajikistan (+992)
  • Tanzania (+255)
  • Thailand (+66)
  • The Bahamas (+1)
  • The Gambia (+220)
  • Timor-Leste (+670)
  • Togo (+228)
  • Tokelau (+690)
  • Tonga (+676)
  • Trinidad and Tobago (+1)
  • Tunisia (+216)
  • Turkey (+90)
  • Turkmenistan (+993)
  • Turks and Caicos Islands (+1)
  • Tuvalu (+688)
  • U.S. Virgin Islands (+1)
  • Uganda (+256)
  • Ukraine (+380)
  • United Arab Emirates (+971)
  • United Kingdom (+44)
  • United States (+1)
  • Uruguay (+598)
  • Uzbekistan (+998)
  • Vanuatu (+678)
  • Venezuela (+58)
  • Vietnam (+84)
  • Wallis and Futuna (+681)
  • Western Sahara (+212)
  • Yemen (+967)
  • Zambia (+260)
  • Zimbabwe (+263)
مرورگر شما از HTML5 پشتیبانی نمی کند.

سوالی دارید؟ از ما بپرسید، کارشناسان ما در اسرع وقت با شما تماس می گیرند.

آموزنگار

آکادمی آموزنگار

  • 021-88945907
  • شنبه تا چهارشنبه از ساعت 8 تا 17
  • info@amooznegar.com
ورود
استفاده از شماره تلفن
استفاده از آدرس ایمیل
آیا هنوز عضو نشده اید؟ ثبت نام کنید
بازیابی رمز عبور
استفاده از شماره تلفن
استفاده از آدرس ایمیل
ثبت نام
استفاده از شماره تلفن
استفاده از ایمیل
قبلا عضو شده اید؟ ورود به سیستم
محافظت توسط