مشخصات مقاله
-
913
-
0.0
-
2616
-
0
-
0
آموزش Xamarin-ایجاد Resource برای نمایش های متفاوت- قسمت 4
آموزش Xamarin-ایجاد Resource برای نمایش های متفاوت- قسمت 4
آندروید خود را بر روی بسیاری از دستگاه های مختلف اجرا می کند، هر یک از دستگاه ها دارای طیف گسترده ای از رزولوشن، اندازه صفحه نمایش و تراکم صفحه نمایش هستند. آندروید scaling و تغییر اندازه(resizing) را برای ایجاد برنامه کاربردی خود بر روی این دستگاه ها، انجام خواهد داد ، اما این ممکن است منجر به تجربه کاربری sub-optimal شود. به عنوان مثال، تصاویر ممکن است تار شود، تصاویر ممکن است بیش از حد (و یا به اندازه کافی) فضای صفحه ای را اشغال نکنند که باعث می شود موقعیت عناصر UI در layout همپوشانی داشته باشد یا خیلی دور از هم باشند.
مفاهیم
چند اصطلاح و مفاهیم مهم برای درک درست پشتیبانی از چند صفحه نمایش هستند که باید درک کنیم:
- اندازه صفحه نمایش(Screen Size) : مقدار فضای فیزیکی برای نمایش برنامه شما.
- تراکم صفحه(Screen Density) : تعداد پیکسل ها در هر منطقه مشخص روی صفحه نمایش. واحد اندازه گیری دقیق نقطه در اینچ (dpi) است.
- Resolution: تعداد کل پیکسل ها بر روی صفحه نمایش. هنگام طراحی برنامه ها، رزولوشن به اندازه اscreen size و تراکم صفحه نمایش اهمیت ندارد.
- پیکسل مستقل از تراکم Density-independent pixel (dp) - این یک واحد مجازی اندازه گیری است که اجازه می دهد پوسته ها مستقل از تراکم طراحی شوند. برای تبدیل dp به پیکسل های صفحه، فرمول زیر استفاده می شود: px = dp × dpi ÷ 160
- جهت گیری(Orientation)- جهت گیری صفحه نمایش به عنوان landscape در نظر گرفته شده است که آن را عریض تر باشد تا بلندتر. در مقابل، جهت گیری portrait زمانی است که صفحه نمایش بلندتر از آن است که عریض باشد. جهت گیری می تواند در طول زمان اجرای یک برنامه زمانی که کاربر دستگاه بچرخاند تغییر می کند.
توجه داشته باشید که سه مفاهیمی که اول بیان شدند در ارتباط با یکدیگر هستند-افزایش "رزولوشن" بدون افزایش "تراکم" "اندازه صفحه نمایش" را افزایش می دهد. با این حال اگر تراکم و رزولوشن هر دو افزایش یابد، اندازه صفحه نمایش بدون تغییر می تواند باقی بماند. این رابطه بین اندازه صفحه نمایش، تراکم و رزولوشن پیچیدگی صفحه نمایش را به سرعت پشتیبانی می کند.
برای کمک به مقابله با این پیچیدگی، Android framework ترجیح می دهد از پیکسل مستقل از تراکم (dp) برای پوسته های صفحه استفاده کند. با استفاده از پیکسل های مستقل تراکم، عناصر UI به کاربر برای داشتن اندازه فیزیکی مشابه روی صفحه نمایش با تراکم های مختلف ظاهر می شود .
پشتیبانی از اندازه صفحه نمایش های مختلف و تراکم
آندروید بیشترین کار را انجام می دهد تا طرح بندی ها را به درستی برای هر پیکربندی صفحه نمایش انجام دهد. با این حال، برخی از اقدامات وجود دارد که می تواند برای کمک به سیستم خارج شود. استفاده از پیکسل های مستقل تراکم به جای پیکسل های واقعی در طرح بندی در اغلب موارد برای اطمینان از استقلال تراکم کافی است. آندروید به اندازه مناسب با drawables در زمان اجرا مقیاس خواهد شد. با این حال، این ممکن است که این " مقیاس گذاری "باعث شود که "bitmaps" تار شود. برای جلوگیری از این، ممکن است لازم باشد منابع جایگزین برای تراکم های مختلف ارائه شود. هنگام طراحی دستگاه ها برای رزولیشن های چندگانه و تراکم صفحه نمایش، بهتر است که تصاویر با رزولوشن بالا یا تراکم پیکسلی را شروع کرده و سپس آن را کاهش دهید.این کار باعث جلوگیری از تار شدن و تحریف که باعث تغییر اندازه شود جلوگیری کند.
تعریف اندازه صفحه نمایش (Screen Size) برای پشتیبانی برنامه
تعریف اندازه صفحه نمایش تضمین می کند که تنها دستگاه هایی پشتیبانی می کنند نرم افزار را دانلود کنند. این کار با تنظیم عنصر " supports-screen" در فایل "AndroidManifest.xml" انجام می شود. این عنصر برای مشخص کردن اندازه صفحه نمایش توسط برنامه کاربردی مورد استفاده قرار می گیرد. صفحه نمایش داده شده ،در صورتی که نرم افزار بتواند به درستی طرح های خود را برای پر کردن صفحه نمایش پشتیبانی کند، پشتیبانی می شود. با استفاده از این عنصر مانیفست، برای دستگاه هایی که مشخصات صفحه نمایش را برآورده نمی کنند این برنامه در Google Play نمایش داده نخواهد شد. با این وجود، برنامه هنوز در دستگاههایی که از این صفحه نمایش پشتیبانی نمیکنند اجرا خواهد شد، اما طرح بندی ممکن است ظاهری تار و پیکسل شده داشته باشد. برای انجام این کار در Xamarin.Android لازم است ابتدا یک فایل AndroidManifest.xml را به پروژه اضافه کنید، اگر قبلا وجود نداشته باشد:
AndroidManifest.xml به دایرکتوری Properties اضافه شده است. سپس فایل برای افزودن « supports-screens » ویرایش می شود:
ارائه "طرح های متناوب" برای اندازه های مختلف "صفحه"
اگر چه آندروید با توجه به اندازه صفحه نمایش تغییر خواهد کرد، ممکن است در بعضی موارد کافی نباشد. ممکن است مطلوب باشد که اندازه برخی از عناصر UI را بر روی یک صفحه بزرگتر افزایش دهیم یا موقعیت عناصر UI را برای یک صفحه کوچکتر تغییر دهیم.
با شروع «API Level 13 (Android 3.2)» اندازه صفحه نمایش به نفع استفاده از " swNdp qualifier " منسوخ شده است. این " qualifier" جدید اعلام می کند که مقدار فضای مورد نظر نیاز است. به شدت توصیه می شود که برنامه های کاربردی که در اندروید 3.2 یا بالاتر اجرا می شوند باید از این "Qualifiers" جدید استفاده کنند. به عنوان مثال، اگر یک طرح(layout) نیاز به حداقل 700dp عرض صفحه را داشته باشد، طرح جایگزین(alternate layout) در پوشه "layout-sw700dp" وارد می شود:
به عنوان یک راهنما، در اینجا چندین شماره برای دستگاه های مختلف وجود دارد:
- تلفن معمولی : 320dp: یک تلفن معمولی
- یک تبلت 5 اینچ –دستگاه tweener : 480dp: مانند Note سامسونگ
- یک تبلت 7 اینچی - 600dp: مانند Barnes & Noble Nook
- یک تبلت 10 اینچی - 720dp: مانند موتورولا Xoom
برای برنامه های کاربردی که سطوح API تا 12 (Android 3.1) را هدف قرار می دهد، طرح بندی باید در دایرکتوری هایی باشد که از "Qualifiers small / normal / large / xlarge" به عنوان تعمیم اندازه صفحه نمایش های مختلف که در اکثر دستگاه های موجود هستند استفاده می کنند. به عنوان مثال، در تصویر زیر، منابع متناوب برای اندازه های مختلف صفحه نمایش وجود دارد:
در زیر مقایسه ای از چگونگی " qualifiers" صفحه نمایش " قبل از API Level 13 " نسبت به پیکسل های مستقل از تراکم است:
- 426dp x 320dp is small
- 470dp x 320dp is normal
- 640dp x 480dp is large
- 960dp x 720dp is xlarge
Screen size qualifiers در API level 13-و بالاتر مقدم تر از screen qualifiers در API levels 12 و پایین تر است. برای برنامه های کاربردی که سطوح قدیمی و API جدید را پوشش می دهند، ممکن است لازم باشد منابع جایگزین را با استفاده از هر دو مجموعه qualifiers ایجاد کنید، همانطور که در تصویر زیر نشان داده شده است:
Bitmap های مختلف برای تراکم های مختلف صفحه نمایش
اگر چه آندروید "bitmaps" را در صورت لزوم برای یک دستگاه اندازه گیری می کند، خود bitmaps ظرافتی در مقایسه بالا و پایین ندارد: آنها ممکن است تیره یا تار شود. ارائه "bitmaps" مناسب برای تراکم صفحه نمایش، این مشکل را کاهش می دهد.
به عنوان مثال، تصویر زیر یک نمونه از مشکلات طرح و ظاهر است وقتی تراکم مشخص منابع ارائه نشده است ممکن است رخ دهد.
این را با یک طرح که با منابع خاص تراکم طراحی شده مقایسه کنید.
با استفاده از Android Asset Studio، منابع تراکم متفاوتی ایجاد کنید
ایجاد این تصاویر از تراکم های مختلف می تواند کمی خسته کننده باشد. به همین ترتیب، گوگل یک ابزار آنلاین را ایجاد کرده است که می تواند برخی از یکنواختی هایی که در ایجاد این "bitmaps" وجود دارد با فرخوانی "Android Asset Studio" را کاهش دهد.
این وبسایت با ایجاد یک bitmaps که با قرار دادن یک تصویر، چهار تراکم صفحه نمایش معمول را هدف قرار می دهد، کمک خواهد کرد. Android Asset Studio سپس "bitmaps" را با برخی از سفارشی سازی ها ایجاد می کند و سپس اجازه می دهد آنها را به عنوان یک فایل "zip" دانلود کنید.
نکاتی برای Multiple Screens
آندروید بر روی تعداد زیادی از دستگاه ها کار می کند و ترکیبی از اندازه صفحه نمایش و تراکم صفحه نمایش می تواند غلبه کند. راهنمایی های زیر می تواند به کم کردن تلاش لازم برای پشتیبانی از دستگاه های مختلف کمک کند:
- فقط طراحی و توسعه برای چیزی که شما نیاز دارید - بسیاری از دستگاه های مختلف وجود دارد، اما بعضی از آنها در فاکتورهای نادر وجود دارند که ممکن است برای طراحی و توسعه آن تلاش زیادی بکنید. داشبورد " Screen Size and Density" یک صفحه ارائه شده از سوی Google است که اطلاعاتی را درباره شکستن(breakdown) « screen size / screen density » ارائه می دهد.این شکست(breakdown) باعث فهم درباره چگونه به توسعه تلاش در پشتیبانی از صفحه نمایش کمک می کند.
- استفاده از DPs به جای Pixels - پیکسل ها به عنوان تغییرات تراکم صفحه نمایش مشکل ساز می شوند. مقادیر پیکسل را هاردکود نکنید. از پیکسل ها به نفع dp اجتناب کنید(پیکسل مستقل از تراکم).
- اجتناب از AbsoluteLayout هر جا که امکان دارد - در "سطح API 3 (Android 1.5)" از بین رفته است و " layouts" شکننده ایجاد می کند. این نباید استفاده شود. در عوض، سعی کنید از ویدجت های انعطاف پذیر تر "Layout" مانند "LinearLayout"، "RelativeLayout" یا "GridLayout" استفاده کنید.
- یک جهت (orientation)را به عنوان پیش فرض خود انتخاب کنید - به عنوان مثال ، به جای فراهم کردن منابع جایگزین ""layout-land" و "layout-port" ، منابع را برای landscape در "layout" قرار دهید و منابع برای portrait به "layout-port".
- استفاده از LayoutParams برای ارتفاع و عرض -هنگام تعریف عناصر UI در یک فایل XML layout ، یک برنامه اندرویدی با استفاده از بسته بندی و مقادیر پر از ارزش، موفق تر خواهد شد و مطمئن می شود که در دستگاه های مختلف نسبت به استفاده از واحدهای مستقل پیکسل یا تراکم واحدهای مستقل نگاه مناسب داشته باشد. این مقادیر ابعاد باعث می شود آندروید به مقیاس منابع bitmap به عنوان مناسب در نظر بگیرد. به همین دلیل، واحدهای مستقل تراکم برای تعیین پارامترهای margins و padding عناصر UI بهتر هستند.
تست Multiple Screens
یک برنامه Android باید بر علیه تمام تنظیمات مورد پشتیبانی آزمایش شود.حالت ایده آل این است که برنامه بر روی دستگاه های بسیاری امتحان کرد اما در بسیاری از موارد این امکان پذیر نیست و عملی نیست. در این مورد استفاده از شبیه ساز و تنظیمات مجازی دستگاه Android برای هر پیکربندی دستگاه مفید خواهد بود.
" Android SDK" برخی از "پوسته شبیه ساز(emulator skins)" فراهم می کند که ممکن برای ایجاد AVD با اندازه، تراکم و وضوح بسیاری از دستگاه مورد استفاده قرار بگیرد. بسیاری از فروشندگان سخت افزاری نیز "پوسته ها" را برای دستگاه های خود ارائه می دهند.
یکی دیگر از گزینه ها این است که از خدمات یک سرویس تست شخص ثالث استفاده کنید. این سرویس ها APK را دریافت می کنند، آن را در بسیاری از دستگاه های مختلف اجرا می کنند، و سپس بازخورد ارائه می دهند که برنامه چگونه کار می کند.