آموزش برنامه نویسی اندروید (Android)
۴۱۹ آموزش
نمایش دسته بندی ها (۴۱۹ آموزش)

طراحی نوع نمایش فایل های xml برای صفحه های نمایش با اندازه های مختلف (گوشی های مختلف)

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

نگاهی به شکل زیر بیندازید (شکلی از پوشه های یک پروژه اندروید) :

طراحی نوع نمایش فایل های xml برای صفحه های نمایش با اندازه های مختلف (گوشی های مختلف)

در شکل بالا، ما 4 پوشه (folder) را با کادر قرمز رنگ، مشخص کرده ایم، اما اگر دقت کنید، شما در پروژه اندروید خود (در برنامه eclipse)، تنها پوشه با نام layout را دارید. موضوع این است که، پوشه layout که ما در آن، فایل های xml خود برای نمایش ظاهر activity ها را قرار می دهیم، برای گوشی های با اندازه نرمال (normal) مناسب است و چنانچه بخواهیم فایل های xml ، در گوشی های با سایر اندازه های صفحه نمایش نیز به طور مناسب نمایش داده شوند، باید 3 پوشه دیگر را نیز برای پروژه اندروید خود ساخته و سپس از فایل xml مورد نظرمان، به درون هر یک از آنها، کپی کنیم. (اگر تنها فولدر layout موجود باشد، برای همه گوشی ها، فایل های xml موجود در آن، به کاربر نمایش داده می شود)

بنابراین تا اینجا شرح دادیم که علاوه بر پوشه layout ، باید 3 پوشه دیگر نیز بسازیم (با نام ها و موقعیت نمایش داده شده در شکل قبل)، سپس مثلا یک فایل xml را قبلا در پوشه layout ساخته ایم و آن را ویرایش کرده ایم. اکنون برای اطمینان از نمایش صحیح آن در سایر گوشی ها، در هر یک از 3 پوشه دیگر، آن را کپی می کنیم. در نهایت باید فایل های xml درون 4 پوشه را به طور جداگانه باز کنیم و موقعیت عناصر را در آنها تنظیم نماییم.

هر یک از این 4 پوشه، برای یک دسته از گوشی های اندروید با یک محدوده صفحه نمایش مشخص می باشد. مثلا فرض کنید که برنامه اندروید را بر روی یک گوشی با صفحه نمایش بزرگ (large) نصب نماییم، گوشی اندروید، به جای اینکه فایل xml موجود در پوشه layout را به کاربر نمایش دهد، فایل xml موجود در layout-large را نمایش خواهد داد. بنابراین کاربر، طراحی شما برای گوشی اندروید با صفحه نمایش بزرگ (large) را مشاهده می کند و از این بابت، خیال شما آسوده خواهد بود.

اثرگذاری رزولوشن عکس های برنامه اندروید :

قرار دادن عکس در پوشه های drawable مختلف، برای ((رزولوشن)) است، نه ((اندازه صفحه نمایش)). یعنی ما عکس های با رزولوشن مختلف را در پوشه های مختلف قرار می دهیم تا برای یک گوشی با رزولوشن بالا، عکس با رزولوشن بالاتری نمایش داده شود. اما در مواردی که تعیین کرده باشید که اندازه ImageView به اندازه خود محتوای آن (یعنی عکس) وابسته باشد، رزولوشن در نحوه قرارگیری ImageView تاثیر خواهد داشت. در واقع، رزولوشن برای کیفیت مناسب عکس است و زیاد جالب نیست که نحوه قرارگیری عناصر مربوط به عکس را به گونه ای تعیین کنیم که رزولوشن در آنها تاثیرگذار باشد.

بنابراین بهتر است که یک جمع بندی در این زمینه داشته باشیم :

1- در پوشه های layout با نام های مختلف، فایل های xml جداگانه ای را برای ظاهر گرافیکی Activity در گوشی های با ((اندازه صفحه نمایش)) مختلف قرار می دهیم :


res/layout/layout.xml  
res/layout-small/layout.xml  
res/layout-large/layout.xml  
res/layout-xlarge/layout.xml  
res/layout-land/layout.xml  
res/layout-small-land/layout.xml  
res/layout-large-land/layout.xml  
res/layout-xlarge-land/layout.xml

در کدهای بالا، پوشه هایی نیز با پسوند land ساخته ایم، مثلا یک پوشه با نام layout-xlarge-land ساخته ایم که مربوط به گوشی های با اندازه xlarge است که برای زمانی است که گوشی دارای اندازه xlarge بوده و همچنین در حالت افقی (landscape) قرار گرفته باشد (یک یادآوری برای این نکته است که برای هر Activity ، می توانیم یک فایل xml نیز برای زمانی طراحی کنیم که کاربر، گوشی را در حالت افقی (landscape) قرار می دهد)(برای توضیحات بیشتر، کلید شماره 2619 را بخوانید).

طراحی نوع نمایش فایل های xml برای صفحه های نمایش با اندازه های مختلف (گوشی های مختلف)
گوشی در دو حالت عمودی (portrait) و افقی (landscape)

بنابراین برای لایه گرافیکی Activity ، در هر کدام از پوشه ها، یک فایل xml قرار می دهیم (مثلا ابتدا یکی ساخته و سپس آن را در بقیه کپی کنید). معمولا توسعه دهنده ها، ابتدا برای یک دسته (معمولا در پوشه layout که پیش فرض است)، یک فایل xml می سازند و تمامی عناصر آن را طراحی می کنند و عملکرد کدهای java مربوط به Activity را هم تست می کنند و در آخر که خیالشان از همه چیز راحت شد، فایل xml را در بقیه پوشه ها کپی کرده و سپس آنها را تک تک باز می کنند و از طریق برنامه eclipse که این امکان را می دهد که ظاهر گرافیکی فایل xml را ببینیم، نحوه چیدمان عنصرها را تنظیم می کنند.

2- واحد dp را برای اندازه عناصر گرافیکی و واحد sp را برای متن به کار می بریم (واحد sp برای اندازه خود متن، نه برای اندازه TextView یا عناصری که حاوی متن هستند).

3- باید ببینیم که آیا اندازه عناصر گرافیکی موجود در لایه گرافیکی را به محتوایی که در آنها قرار می گیرد، وابسته کرده ایم یا خیر. مثلا آیا اندازه یک ImageView به عکسی که در آن قرار می گیرد وابسته است یا خیر. توصیه این است که چنین وابستگی ایجاد نکنیم، اما اگر وابسته است، قرار دادن عکس با رزولوشن های مختلف، در پوشه های مختلف drawable که برای گوشی های اندروید با ((رزولوشن)) مختلف می باشند، کمک می کند که چندان ظاهر گرافیکی، در گوشی های با رزولوشن متفاوت، تغییر نکند (ولی باز هم می گویم که آنها را به رزولوشن وابسته نکنید) :


res/drawable-hdpi/icon.png
res/drawable-ldpi/icon.png
res/drawable-mdpi/icon.png
res/drawable-xhdpi/icon.png
res/drawable-xxhdpi/icon.png
طراحی نوع نمایش فایل های xml برای صفحه های نمایش با اندازه های مختلف (گوشی های مختلف)
نکته

هر فایل xml که برای یک دسته از گوشی ها با ((اندازه صفحه نمایش)) مشخص به کار می بریم، در واقع برای یک دسته از گوشی ها است که اندازه صفحه نمایش آنها، در یک بازه مشخص قرار می گیرد (اندازه آنها دقیقا یکسان نیست). بنابراین بهتر است عناصر به گونه ای تعریف شوند که در همین بازه نیز تغییرات چندانی نداشته باشیم.

نکته

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

نکته

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

نویسنده علیرضا گلمکانی
شماره کلید 239
گزینه ها
به اشتراک گذاری (Share) در شبکه های اجتماعی
نظرات 1 1 0
مهدی
۱۳۹۶/۰۲/۱۴
۰۸:۱۱

سلام دوست عزیز
بنده یک مشکل دارم
جریان از این قراره که من از چگالی استفاده میکردم برای مولتی ساپورت اسکرین ولی خوب جواب نمیداد منظورماز چگالی استفاده از چهار چگالی اندروید هست
ولی دیروز متوجه شده یه تقسیم بندی دیگه هست بر اساس چهار نوع دیگر که اون بهتر عمل میکنه
خواستم کمی منو روشن تر کنید که کجا از چگالی استفداه میشه و کجا از همون روش چهار سایز (کوچک و نرمال , بزرگ و خیلی بزرگ)
ممنون میشم جوابم رو به ایمیلم ارسال کنید
سربلند باشید و بهروز

ارسال نظر جدید (بدون نیاز به عضو بودن در وب سایت)