Skip to main content

بررسی تغییرات نمای اکتیویتی ها با بکارگیری فرگمنت ها

Lay out activities with fragments

در این درس، شما با مفهوم fragments در توسعه اپلیکیشن‌های اندروید آشنا می‌شوید و می‌آموزید که چگونه از آن‌ها برای طراحی رابط کاربری responsive و سازگار با صفحه‌نمایش‌های متنوع استفاده کنید. Fragments به‌عنوان اجزای ماژولار، امکان تقسیم‌بندی UI به بخش‌های قابل‌استفاده مجدد را فراهم می‌کنند و انعطاف‌پذیری لازم برای پشتیبانی از دستگاه‌های مختلف، از گوشی‌های هوشمند تا تبلت‌ها، را به ارمغان می‌آورند. این درس به بررسی lifecycle fragments، روش‌های ایجاد و مدیریت آن‌ها، و پیاده‌سازی آن‌ها در layoutهای مختلف برای تطبیق با اندازه و جهت صفحه می‌پردازد. با مثال‌های عملی مانند الگوی list-detail، نشان داده می‌شود که چگونه fragments می‌توانند تجربه کاربری را بهبود دهند. این آموزش برای توسعه‌دهندگانی که قصد دارند اپلیکیشن‌های خود را برای طیف گسترده‌ای از دستگاه‌های اندرویدی بهینه‌سازی کنند، طراحی شده و دانشی عمیق و کاربردی ارائه می‌دهد.

لینک کمکی (official link) – آموزش حرفه‌ای Fragments برای UI ریسپانسیو در اندروید

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

من به صفحه خوش آمد اندروید استودیو میرم و به صفحه اول میرم و با زدن start a new Android Studio project میام و یک پروژه جدید ایجاد میکنم. نام این برنامه جدید رو FragmentApp میذارم. چون این یک برنامه موقتی هستش اهمیتی به نام پکیج نمیدم و مکانش هم روی دسکتاپم تعریف میکنم؛ نکست میزنم و در این پنجره تمام قسمتهای این فرم و minimum SDK دیفالت رو همینطوری میذارم بمونه و نکست میزنم. و بعد در صفحه قالب اکتیویتی، یکبار دیگه blank activity رو انتخاب میکنم و نکست میزنم. ولی ایندفعه در این صفحه آپشن use a fragment رو انتخاب میکنم و تیکش رو میزنم.

و روی فینیش کلیک میکنم تا پروژه ام ساخته بشه. مثل قبل، پروژه ام با پیش نمایشی از صفحه لایوت باز میشه. ولی اگه به فولدر لایوت در فولدر منابع نگاه کنیم، میبینیم که سه تا فایل لایوت وجود داره. Activity _Main که مثل قبل شامل coordinator layout، کنترل های موجود در منو برنامه، و یک include برای فراخوانی محتویات فایل content هستش و Content_Main.xml. این دفعه Content_Main.xml یک عنصر فرگمنت هم داره که به یک کلاس جاوا به نام MainActivity Fragment اشاره داره.

کلاس MainActivity Fragment یک متد oncreate view داره که میاد لایوت خودش رو به نام Fragment _Main لود میکنه و اون این فایل هستش. به عنوان یادآوری میگم که در متد oncreate view اول از همه میومدیم لایوت مربوط به اون اکتیویتی خاص رو با کدهای جاوا به اکتیویتی متصل میکردیم تا موقع اجرای برنامه اون لایوت خاص لود بشه. در واقع باید لایوت مربوط به هر اکتیویتی رو در فایل جاوا به اون اکتیویتی بشناسونیم. خب شاید واستون سوال پیش بیاد که اصلا چرا ما از فرگمنت استفاده میکنم. دلیلش این هست که با استفاده از فرگمنت ها ما میتونیم چند تا صفحه یا چند تا قطعه نمایشی رو با هم در یک لایوت برنامه به صورت پویا در زمان اجرا داشته باشیم. در این برنامه ابتدایی، چون ظاهرش همیشه یک حالت داره مهم نیست که روی چه دستگاهی ران بگیریم. ولی بهرحال من روی هر دو دستگاه تلفن و تبلت اجرا میگیرم.

در صفحه انتخاب دستگاه یا همین Device Chooser من هر دو دستگاه رو انتخاب میکنم و بعد وقتی برنامه لود شد، میبینیم که ظاهر دو تاش عین همه. البته اینجا متوجه یک مارجین افقی متفاوت بین دو دستگاه میشید و میبینید که در تبلت مارجین یا حاشیه بیشتری نسبت به گوشی وجود داره. ولی دلیلش فرگمنت نیست. بلکه دلیلش فایل SpecialDemands.xml ای هستش که تظیماتش برای صفحه نمایش های بزرگ فراخونی میشه. میتونید به صورت کاملا واضح مزایای استفاده از فرگمنت ها رو با ایجاد یک برنامه جدید دیگه با قالبی به نام master detail template ببینید.

من این پروژه رو میبندم و یک پروژه اندروید استودیوی دیگه ایجاد میکنم و اسمش رو Master Detail میذارم. همه قسمت های این فرم و همینطور  minimum SDKرو همینطوری رها میکنم و ایندفعه در قسمت انتخاب قالب اکتیویتی برنامه Master Detail Flow رو انتخاب میکنم و همه تنظیماتش رو به صورت پیش فرض قبول میکنم و فینیش رو میزنم. حالا این پروژه فایل های لایوت بیشتری داره. دقیقا پنج تا فایل لایوت.

چهار تا فایل XML اولیه وجود داره. یکیش اسمش activity _item_list هستش و شامل یک ارجاع به یک فرگمنت هستش و بعد fragment _item_detail، activity _item_detail، و activity _item_app_bar هستند. خب چه اتفاقی تو این برنامه قرار هست بیافته. وقتی برنامه رو باز میکنید، این کلاس جاوا یعنی item _ListActivity بالا میاد. این کلاس لانچر هستش و بعد از اون، این میره و دنبال یک عنصر خاص میگرده.

اگه اون یک عنصر خاص رو در یک فایل لایوت پیدا کرد دقیقا منظورم این خط هست، عنصر item_detail_container، میگه اگه null نبود، اگه پیدا شد، تصمیم میگیره متغیر mtwopane رو true بذاره که این متغیر مربوط به حالت دو پنجره ای بودن صفحه میشه و اگه null بود یعنی اون عنصر رو پیدا نکرد صفحه تک پنجره ای باشه و اون به این دو تا فایل مجزای XML، activity item list مربوط و با اونها فعال میشه. یکی از اونها برای تبلت ها طراحی شده که شامل یک فرگمنتی هست که برای خودش یک آیدی داره به نام item _list. بنابراین اینجا تفاوت رفتار این برنامه در دو تا دستگاه مشخص میشه.

یکبار دیگه برنامه رو روی هر دو دستگاه اجرا میکنم. در دستگاه تلفن در سمت راست، که یک دستگاه واقعی هستش و من به صفحه کامپیوترم وصلش کردم، وقتی یکی از آیتم ها رو لمس میکنم، به یک اکتیویتی کاملا متفاوت میرم و این اکتیویتی انعطاف پذیری زیادی در این لایوت داره. میتونم در این قسمت کلیک کنم و صفحه رو بالا و پایین ببرم. این کارها توسط کنترل coordinator layout مدیریت میشن و بعد وقتی دکمه بک رو بزنم به لیست ویو برمیگردم. ولی در تبلت، وقتی یک آیتم رو میزنم، اطلاعاتش رو در سمت راست همون صفحه میبینم.

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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دوره ها
درس ها
Tha PMIS
طهاکو من
0