نحوه تعریف منابع جایگزین برای ابعاد یا dimension های مختلف در صفحات نمایش
این درس از دوره «آموزش ضروری توسعه اپلیکیشنهای اندروید» به بررسی جامع نحوه تعریف alternative dimension resources میپردازد؛ از طریق ایجاد فایلهای XML مانند dimens.xml و بهکارگیری resource qualifiers مانند values-sw600dp، چگونگی پشتیبانی از انواع صفحهنمایشهای مختلف به شکلی دقیق و بهینه تشریح میشود. در این محتوا، علاوه بر توضیح اهمیت ارائه منابع ابعادی متفاوت برای حفظ یکنواختی UI در دستگاههای گوناگون، روشهای بهبود مقیاسبندی و ارائه مثالهای عملی به کاربر معرفی شده تا بتواند چالشهای طراحی responsive را بهطور حرفهای مدیریت کند.
شما میتونید در حالت خاص از فولدر موجود در منابع با نام dimensions برای مدیریت اینکه روی دستگاه های با سایز صفحه نمایش بزرگ چه اتفاقی بیفته، استفاده کنید. وقتی یک پروژه اندروید استودیوی جدید ایجاد میکنید، دو تا فایل با نام dimens.xml. دارید. اونیکه به صورت پیش فرض هستش تنظیمات Activity Horizontal Margin و Activity Vertical Margin داره و بسته به قالب مورد نظر ممکن هست تنظیمات margin مربوط به دکمه Floating Action button هم داشته باشید. یک فایل دیگر هم در این فولدر وجود داره که اسمش با w820dp داخل پرانتز تموم میشه، و این یک تنظیمات جایگزین دیگه ای برای Horizontal Margin یا حاشیه افقی داره.
این حالت برای صفحه نمایش های با عرض حداقل 820 device-independent pixels فراخوانی میشه، و روی هر دو حالت های عمودی و افقی عمل میکنه برای مثال تبلت Nexus 9 صفحه ای با یک همچین dpi ای رو داره. من این رو در یک پروژه dimens دیگه نشونتون میدم، و میخوام کارم رو فعلاً با یکی از فایل های Content About شروع کنم. خاطرتون هست که دو تا نوع از این فایل ها اینجا داشتم، یکی برای حالت عمودی و یکی برای افقی، و من از حالت پیش فرض یا جهت عمودی شروع میکنم.
میرم سراغ اولین text view، جایی که تنظیمات مربوط به سایز تیترم و نوشتم و روی 24 SP تنظیمش کردم من این مقدار رو انتخاب میکنم و بعد با زدن آلت و اینتر و این مقدار رو به عنوان یک منبع dimension، extract میکنم. پس تنها کاری که می کنم این هست که گزینه Extract dimension resorce رو انتخاب کنم و در پنجره Extract Resorce در قسمت Resorce name اسمش رو headline _size میذارم و نهایتا اوکی می کنم. بعد این مقدار رو کپی میکنم و به نسخه landscape یا حالت افقی میرم، و این مقدار 24 SP رو با مقدار dimension resource جدیدی که کپی کردم جایگزین میکنم. در واقع این مقدار به عنوان یک منبع dimension در منابع ذخیره شده و اینجا ازش استفاده میکنم.
حالا، با فشردن کنترل یا کامند به ترتیب برای ویندوز و مک و کلیک کردن، اون مقداری که ساخته بودم رو در فایل dimens.xml
نشون میده. خب حالا برمیگردم به فایل لایوت پیشفرضم و یک ویژگی text size هم به text view طولانی ام اضافه میکنم، مقدارشو 14 SP قرار میدم. بعد یکبار دیگه، اونو به عنوان یک dimension resource، extract میکنم، و اسمش رو Content Size میذارم، و بعد کل این ویژگی رو انتخاب و کپی میکنم، و به اون یکی لایوت میرم و برای متن حالت افقی ام یعنی درست به این Text View پاست اش میکنم.
تا حالا، هرکاری که کردم چکیده گرفتن از مقادیرم در dimension resources یا منابع ابعاد بود، ولی خروجی باید دقیقا همون چیز قبلی باشه. این هم بد نیست بدونید، چکیده گرفتن یا abstract برای تعریف کلاسی که قرار نیست هیچ آبجکتی أزش تولید بشه کاربرد داره، مثلا اگه ما مفاهیم اتومبیل و مرسدس بنز رو در نظر بگیریم اتومبیل یک مفهوم abstract محسوب میشه و مرسدس بنز یکی از نمونه هایی هست که از نمونه پایدار و اصلی مون ساخته میشه و ما هر نمونه دلخواه دیگه ای رو هم می تونیم اضافه کنیم مثلا BMW. برای تست همه این خروجی ها، من یک دستگاه مجازی جدید تبلت Nexus 9؛ که بتونه خروجی ها رو شبیه سازی کنه ایجاد میکنم، و من قبلا از این دستگاه روی صفحه نمایش در کنار دستگاه موبایل فیزیکی Nexus 5X ام ران گرفتم و حالا میخوام برنامه ام رو روی هر دوی این دستگاه ها به صورت همزمان اجرا کنم. وقتی روی دکمه ران کلیک میکنم، و دیالوگ مربوط به انتخاب دستگاه رو با نام Device Chooser میبینم، شیفت رو فشار میدم و هر دو دستگاه ها رو انتخاب میکنم و اوکی رو میزنم.
وقتی برنامه روی دستگاه ها بالا میاد، به صفحه About میرم، اول در دستگاه فیزیکی، و بعد از ماوسم برای کار با دستگاه مجازی استفاده میکنم و صفحه About رو باز میکنم و میبینیم که تنظیمات لایوت مربوط به گوشی موبایل بخوبی نمایش داده میشه، ولی متن نمایش داده شده روی تبلت خیلی کوچیک هست. حالا درستش میکنم. برمیگردم به اندروید استودیو و این دو تا تنظیمات مربوط به dimension رو از فایل dimensions پیش فرضم انتخاب و به کلیپبورد کپیشون میکنم.
بعد میرم به اون یکی فایل dimensions و اون مقادیر رو پاست میکنم، و مقدارهاشون رو تغییر میدم. سایز تیتر رو برای تبلت 48 SP و سایز متن اصلی رو 24 SP قرار میدم، و بعد از برنامه مجدد روی دو تا دستگاه ران میگیرم. روی گوشی که همون حالت قبلی رو داریم، ولی روی تبلت، متن بزرگتر و قابل خواندن شده. در شبیه ساز میتونید تغییر جهت صفحه نمایش رو با فشار دادن کلید های کنترل و f11 تست کنید.
توجه داشته باشید، وقتی من به حالت عمودی در تبلت میرم، متن به حالت کوچیکش برمیگرده، این بخاطر این هست که برای تبلت در حالت عمودی اون تظیمات لازم رو در دایرکتوری خاص انجام ندادیم. بنابراین باید نام اون دایرکتوری خاصو عوض کنید یا یک دایرکتوری دیگه در همون موقعیت خاص ایجاد کنید و به صورت دستی تنظیماتش رو انجام بدید. اما در هر صورت، الگویی میبینید که مربوط به جهت گیری دستگاه تون هست. میتونید به طور خاص فایل مجزای دیگه ای برای لایوت ها، ابعاد و انواع دیگه value ها در دایرکتوری منابع ایجاد کنید.