0

آموزش برنامه نویسی اندروید

 
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

آموزش برنامه نویسی اندروید - قسمت ۱۵: طراحی Layout برای دستگاه هایی با تراکم پیکسلی متفاوت‎

در رابطه با Density نیز چهار دسته کلی وجود دارد که عبارتند از: Low(ldpi) به معنی "کم"، Medium(mdpi) به معنی "متوسط"، High(hdpi) به معنی "زیاد" و Extra high(xhdpi) به معنی "خیلی زیاد".

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

از آنجا که سیستم عامل اندروید روی دستگاه های متفاوتی با صفحه نمایش هایی با Density متفاوت اجرا می گردد، این نکته ضروری به نظر می رسد که تصاویر و شکل های مورد استفاده در اپلیکیشن خود را برای صفحه نمایش هایی با میزان Density متفاوت بهینه سازیم. برای این منظور اولین پروژه خود که در قسمت هشتم تحت عنوان My First Android Project را مد نظر قرار می دهیم.

پس از باز کردن این پروژه خواهیم دید که فقط فولدر های drawable-ldpi و drawable-mdpi و drawable-hdpi در زیرشاخه فولدر res قرار دارند.

همانطور که در قسمت دوازدهم آموزش داده شد، اقدام به ساخت دو فولدر دیگر تحت عناوین drawable و drawable-xhdpi می کنیم. با مد نظر قرار دادن تصویر فوق می توان گفت که فولدر شماره یک یا همان فولدر drawable به عنوان فولدر پیش فرض است. در واقع اگر ما در طراحی اپلیکیشن خود فقط و فقط همین یک فولدر را داشته باشیم، اپلیکیشن ما خواهد توانست روی کلیۀ دستگاه ها با صفحه نمایش هایی با Density متفاوت اجرا گردد. فرض کنیم که اپلیکیشن خود را روی یک تبلت ده اینچی نصب می کنیم. در حین اجرای اپلیکیشن، سیستم عامل اندروید متوجه می شود که اپلیکیشن روی یک دستگاه به اصطلاح xhigh یا بسیار بزرگ نصب شده است از این رو در دایرکتوری res به دنبال فولدری تحت عنوان drawable-xhdip می گردد و اگر این فولدر را بیابد مسلماً اقدام به فراخوانی تصاویر و شکل های به کار گرفته شده در UI از این فولدر خواهد کرد و در صورتیکه این فولدر را پیدا نکند به فولدر پیش فرض که همان فولدر drawable است رجوع خواهد کرد و تصاویر و شکل ها را از داخل این فولدر استفاده خواهد کرد. دانستن نکته ای که در اینجا حائز اهمیت است این است که حتی اگر تصاویر و شکل های قرار گرفته داخل فولدر drawable کوچک و کم کیفیت هم باشند، باز هم اندروید آنها را برای تبلت مان استفاده کرده به این صورت که تصاویر و شکل های داخل این فولدر را به صورت خودکار بزرگ می کند. عکس این قضیه هم می تواند اتفاق افتد به این صورت که اگر ما اپلیکیشن خود را روی یک تلفن همراه دو اینچی نصب کنیم و در عین حال فولدر drawable-ldpi که مخصوص صفحه نمایش هایی با Density پایین است را در پروژه خود تعریف نکرده باشیم، اندروید باز هم به فولدر پیش فرض رجوع کرده و اگر تصویر یا شکل مد نظر برای این دستگاه مناسب باشد که آن را استفاده می کند و چنانچه تصویر یا شکلی برای این صفحه نمایش بزرگ باشد اندروید به صورت خودکار آن را کوچک می کند(معمولاً در پروسه کوچک کردن تصاویر و اشکال توسط اندروید افت کیفیت پیدا نمی شود).

این یکی از قابلیت های بسیار مفید سیستم عامل اندروید است که فقط با قرار دادن تصاویر خود داخل یک فولدر پیش فرض می تواند خیالمان راحت باشد که با نصب اپلیکیشن روی هر دستگاهی با هر Density صفحه نمایش اپلیکیشن اجرا خواهد شد اما این در حالی است که چنانچه بخواهیم یک اپلیکیشن حرفه ای طراحی کنیم می بایست برای هر دستگاهی با هر Density صفحه نمایش یک منبع اختصاصی تعریف کنیم. همانطور که در تصویر فوق مشاهده می شود گزینه دو یا فولدر drawable-hdpi برای دستگاه هایی با صفحه نمایشی با Density زیاد مورد استفاده قرار می گیرد و گزینه سه یا فولدر drawable-ldpi برای دستگاه هایی با صفحه نمایشی با Density کم مورد استفاده قرار می گیرد و گزینه چهار یا فولدر drawable-mdpi برای دستگاه هایی با صفحه نمایشی با Density متوسط مورد استفاده قرار می گیرد و گزینه پنج یا فولدر drawable-xhdpi برای دستگاه هایی با صفحه نمایشی با Density بسیار زیاد مورد استفاده قرار می گیرد.


بررسی نسبت مابین صفحه نمایش هایی با Density متفاوت

پس از آنکه فرا گرفتیم که به چه نحوه می توان اپلیکیشن خود را به فولدرهایی تجهیز کرد که برای صفحه نمایش هایی با Density متفاوت بهینه شود حال نوبت به فراگیری راه کاری به منظور تولید تصاویر و شکل هایی برای هر یک از فولدرهای فوق الذکر می رسد. به عنوان یک قانون کلی می توان فولدر drawable-mdpi را "مبنا" قرار داده و نسبت 1.0 را برای آن در نظر بگیریم. حال تصاویری که می خواهیم در فولدر drawable-ldpi قرار دهیم می بایست دارای اندازه ای معادل با 0.75 برابر فولدر مبنا باشند. تصاویر موجود در فولدر drawable-hdpi معادل با 1.5 برابر تصاویر موجود در فولدر مبنا بوده و در نهایت تصاویر موجود در فولدر drawable-xhdpi معادل با 2.0 برابر تصاویر موجود در فولدر مبنا باشند.

برای روشن شدن این مسئله مثالی می زنیم. فرض کنیم که عکسی داریم که ابعداد آن 100 در 100 است و این عکس در فولدر drawable-mdpi قرار دارد.

حال نسخه ای که از روی این تصویر برای فولدر drawable-ldpi تهیه می کنیم می بایست در ابعداد 75 در 75 باشد و نسخه ای که از روی این تصویر برای فولدر drawable-hdpi تهیه می کنیم می بایست در ابعداد 150 در 150 باشد و نسخه ای که از روی این تصویر برای فولدر drawable-xhdpi تهیه می کنیم می بایست در ابعداد 200 در 200 پیکسل باشد.


تقسیم بندی دستگاه های موجود در بازار بر حسب Size و Density

به منظور تقسیم بندی دستگاه های موجود بر حسب اندازه می توانیم نمودار زیر را مد نظر قرار دهیم:


920506-a15-IMAGE 2.jpg

در قسمت بالایی این نمودار اندازه واقعی دستگاه بر حسب اینچ از دو اینچ شروع شده و تا بیش از ده اینچ ادامه یافته است. به طور کلی دستگاه هایی که از حدوداً دو اینچ شروع شده و تا حدوداً سه و نیم اینچ ادامه پیدا می کنند جزو دستگاه های small یا "کوچک" هستند. دستگاه هایی که از حدوداً سه اینچ شروع شده و تا حدوداً چهار و نیم اینچ ادامه پیدا می کنند جزو دستگاه های normal یا "متوسط" هستند. دستگاه هایی که از حدوداً چهار اینچ شروع شده و تا حدوداً هفت اینچ ادامه پیدا می کنند جزو دستگاه های large یا "بزرگ" هستند و در نهایت دستگاه هایی که از حدوداً هفت اینچ شروع شده و تا بیش از ده اینچ ادامه پیدا می کنند جزو دستگاه های xlarge یا "خیلی بزرگ" هستند.

به منظور تقسیم بندی دستگاه های موجود بر حسب تراکم صفحه نمایش یا همان Density می توانیم نمودار زیر را مد نظر قرار دهیم:


920506-a15-IMAGE 3.jpg

در قسمت بالایی این نمودار تراکم واقعی دستگاه بر حسب تعداد نقطه در هر اینچ از 100 dpi شروع شده و تا بیش از 300 dpi ادامه یافته است.

به طور کلی تراکم صفحه هایی که از 100 dpi شروع شده و تا حدوداً 150 dpi ادامه می یابد جزو صفحه نمایش های ldpi یا "کم تراکم" می باشند. تراکم صفحه هایی که از حدوداً 150 dpi شروع شده و تا حدوداً 200 dpi ادامه می یابد جزو صفحه نمایش های mdpi یا صفحه نمایش هایی با "تراکم متوسط" می باشند. تراکم صفحه هایی که از حدوداً 200 dpi شروع شده و تا حدوداً 250 dpi ادامه می یابد جزو صفحه نمایش های hdpi یا "پر تراکم" می باشند و در نهایت تراکم صفحه هایی که از بیش از 250 dpi شروع شده و تا بیش از 300 dpi ادامه می یابد جزو صفحه نمایش های ldpi یا "بسیار پر تراکم" می باشند.

شنبه 28 دی 1392  10:55 AM
تشکرات از این پست
amin_j
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

آموزش برنامه نویسی اندروید - قسمت ۱۶: آشنایی با واحدهای اندازه گیری در سیستم عامل اندروید

معرفی dpi

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

اکنون با دانستن این نکته که صفحه نمایش دستگاه های اندرویدی بر اساس dpi که مخفف Dots per inch به معنی "تعداد نقطه در هر اینچ" گروه بندی می شوند، همواره بایستی این نکته را مد نظر قرار دهیم که در توسعه اپلیکیشن برای سیستم عامل اندروید برای مشخص کردن عناصر روی صفحه مثل دکمه ها، فاصله مابین عناصر روی صفحه و همچنین اندازه متن استفاده از واحد پیکسل کار صحیحی نیست چرا که به طور مثال 100 پیکسل در یک دستگاه با dpi بالا با 100 پیکسل در یک دستگاه با dpi پایین یکسان نخواهد بود بنابراین نتایج متفاوتی را مشاهده خواهیم کرد.


آشنایی با واحد اندازه گیری dip

رویکرد صحیح در رابطه با واحد انتخابی برای عناصر مورد استفاده در GUI یا همان "رابط گرافیکی کاربر" که در یک اپلیکیشن اندروید همان layout است dip می باشد که مخفف واژگان Device Independent Pixel است(این واحد اندازه گیری هم به صورت dip و هم به صورت dp نوشته می شود). در حقیقت dip یک واحد پیکسلی مجازی است که بر اساس یک صفحه نمایش با رزولوشن 160 dpi طراحی شده است. به عبارت دیگر یک dip معادل با یک پیکسل در یک صفحه نمایش که دارای 160 نقطه در هر اینچ است می باشد.

به عبارت دیگر چنانچه کلیه عناصر در یک layout را در توسعه اندروید بر حسب dip تعیین کنیم، این اطمینان را خواهیم داشت که به طور مثال یک دکمه در دستگاه هایی با صفحه هایی با تراکم متفاوت به طور متناسب بزرگ یا کوچک خواهد شد.


آشنایی با واحد اندازه گیری sp

در ارتباط با واحد dip بایستی توجه کرد که این واحد اندازه گیری به هیچ وجه تنظیمات دستگاه اندرویدی را مد نظر قرار نخواهد داد. برای روشن شدن این مطلب به ذکر مثالی می پردازیم. فرض کنیم که فرد کهنسالی یک گوشی با سیستم عامل اندروید دارد و از آنجا که وی دارای بینایی ضعیفی است تنظیمات تلفن همراه ایشان به نحوی است که کلیۀ متون را بزرگ تر از حد معمول نمایش می دهد. حال اگر ما اپلیکیشنی طراحی کنیم که از واحد اندازه گیری dip در UI آن استفاده شده باشد و فرد فوق الذکر اپلیکیشن ما را نصب کند به هیچ وجه قادر نخواهد بود تا اندازه فونت ها را بزرگ تر از آنچه ما تعریف کرده ایم بکند. برای رفع این مشکل یک واحد اندازه گیری دیگر در اندروید تحت عنوان sp که مخفف واژگان Scale Independent Pixel است(توجه داشتن باشیم که برخلاف dip در واحد sp نمی بایست حرف اول کلمه Independent را در مخفف قرار دهیم). در حقیقت نحوه عملکرد واحد sp همانند dip است با این تفاوت که واحد اندازه گیری sp تنظیمات دستگاه اندرویدی را نیز برای نمایش متون مد نظر قرار می دهد.

در واقع در مثال فوق اگر واحد های اپلیکیشن خود را به sp تغییر دهیم، فردی که دارای بینایی ضعیفی است با تغییر تنظیمات تلفن همراه خود به منظور بزرگ تر نشان دادن متون، قادر خواهد بود تا متون داخل اپلیکیشن ما را نیز بزرگ تر از حد معمول ببیند.


نقطه ضعف واحد اندازه گیری sp

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


فرمول تبدیل واحد اندازه گیری dip به Pixel

به طور کلی برای اینکه متوجه شویم که یک dip در دستگاه هایی با Density متفاوت معادل با چند پیکسل است، می بایست در ابتدا تعداد dpi های صفحه نمایش مد نظر را تقسیم بر عدد 160 کرده سپس عدد حاصله را ضرب در اندازه شیئ خود بر حسب dip بکنیم. برای روشن تر شدن این مسئله به ذکر یک مثال می پردازیم. فرض کنیم که یک تلفن همراه داریم که رزولوشن آن برابر با 240 dpi است. در اپلیکیشن خود یک UI داریم که حاوی متنی است که اندازه آن معادل با 20 dip است. حال می خواهیم ببینیم که این متن معادل با چند پیکسل می باشد. در ابتدا عدد 240 را بر عدد 160 تقسیم می کنیم که می شود 1.5 سپس این عدد را در عدد 20 ضرب می کنیم که می شود 30 . در حقیقت این متن ما دارای اندازه 30 پیکسل در دنیای واقعی است.

شنبه 28 دی 1392  10:57 AM
تشکرات از این پست
amin_j
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

آموزش برنامه نویسی اندروید - قسمت ۱۷: نحوه ساخت دستگاه اندرویدی مجازی برای تست اپلیکیشن

آشنایی با نحوه تست کردن اپلیکیشن

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

برای آنکه بتوانیم خروجی برنامه خود را ببینیم، در محیط برنامه نویسی اکلیپس دو راه کار وجود دارد که یکی ساخت Emulator است و دیگری وصل کردن یک تلفن همراه یا تبلت به کامپیوتر.

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


تفاوت مابین Emulator و Simulator

پیش از ادامه توضیحات پیرامون این دستگاه مجازی، نیاز است تا با این مسئله آشنا شویم که تفاوت های مابین Emulator و Simulator چیست و چرا در توسعه اندروید از Emulator استفاده می شود(در زبان انگلیسی فعل Simulate به معنی "شبیه سازی کردن" است و Simulator به معنی "شبیه ساز" است).

به طور کلی می توان گفت که تفاوت عمده میان این دو، رویکردی است که هر کدام از این ابزارهای اتخاذ می کنند. به عبارت دیگر ابزار Emulator روی شبیه سازی عملکرد یک سیستم تمرکز می کند بدون توجه به این مسئله که عملکرد داخلی این سیستم مد نظر چگونه است اما Simulator ها روی شبیه سازی نحوۀ عملکرد اجزای داخلی یک سیستم تمرکز دارند. در واقع زمانیکه بخواهیم بفهمیم که یک سیستم "چه" کاری انجام می دهد می بایست از ابزار Emulator استفاده کنیم و زمانیکه می خواهیم بفهمیم که یک سیستم "چگونه" کاری را انجام می دهد می بایست از Simulator استفاده کنیم.


علت استفاده از Emulator در توسعه اندروید

حال از آنجا که در توسعه اپلیکیشن اندروید صرفاً نیاز داریم تا به ابزاری دسترسی داشته باشیم که عملکردی شبیه به یک تلفن همراه واقعی یا تبلت واقعی داشته باشد و نحوه عملکرد یک اپلیکیشن روی یک دستگاه اندرویدی واقعی را برای ما شبیه سازی کند و به هیچ وجه نیازی نیست که بدانیم این دستگاه مجازی چگونه کار می کند پس در توسعه اندروید از Emulator استفاده می کنیم.

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


نحوه ساخت Emulator در محیط اکلیپس

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


920510-a17-IMAGE 1.jpg

همانطور که در تصویر فوق مشاهده می شود، از منوی اصلی نرم افزار روی گزینه Window کلیک کرده سپس همانطور که با فلش قرمز رنگ نشان داده شده است روی گزینه AVD Manager کلیک می کنیم. در واقع این گزینه به منزله بخشی از ابزارهای توسعه اندروید است که روی محیط برنامه نویسی اکلیپس تنظیم شده است(کلمه اختصاری AVD مخفف واژگان Android Virtual Device به معنی "دستگاه مجازی اندروید" است).

پس از کلیک کردن روی این گزینه پنجره زیر نمایان خواهد شد:


920510-a17-IMAGE 2.jpg

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


920510-a17-IMAGE 3.jpg

در بخش Name می بایست نامی برای این دستگاه مجازی انتخاب کنیم که می خواهیم این دستگاه مجازی به آن نام شناخته شود. اگر چه که این نام کاملاً دلخواه است، اما در انتخاب نام می بایست دقت کرده که گویای خصوصیات دستگاه مجازی ما باشد. در واقع از آنجا که ما در حین ساخت پروژه، اپلیکیشن خود را برای سیستم عامل اندروید 2.1 هدف قرار دادیم، می توانیم نام AVD for 2.1 Version را انتخاب کنیم. سپس در بخش Target به معنی "هدف" می بایست مشخص کنیم که قصد داریم این دستگاه مجازی تلفن همراهی با کدام نسخه از سیستم عامل اندروید را شبیه سازی کند. اگر خاطرمان باشد در آموزش هفتم که به آماده سازی محیط برنامه نویسی اکلیپس برای توسعه اندروید پرداختیم، نسخه ای از اکلیپس که دانلود کردیم فقط تعدادی از SDK های توسعه اندروید را در بر می گرفت. به عبارت دیگر ما فقط می توانیم با این نسخه از اکلیپس برای نسخه های 2.1 و 3.0 و 4.0.3 دست به توسعه اپلیکیشن اندروید بزنیم. شاید علت اینکه کلیۀ SDK های نسخه های دیگر اندروید گنجانده نشده اند این است که تفاوت چندانی مثلاً مابین نسخه 2.1 و 2.2 نمی باشد از این اینرو فقط نسخه 2.1 آورده شده است اما از آنجا که مابین نسخه 2.1 و نسخه 3.0 تفاوت های چشمگیری دیده می شود، نسخه 3.0 هم گنجانده شده است. در مورد نسخه 4.0.3 هم همین شرایط صدق می کند.

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

از آنجا که Emulator بسیاری از ویژگی های یک موبایل را می تواند شبیه سازی کند، در پنجره ساخت این ابزار گزینه ای تحت عنوان SD Card نیز گنجانده شده است. در حقیقت با اختصاص دادن عددی به این گزینه مقدار حافظۀ این دستگاه مجازی را مشخص خواهیم کرد. در این آموزش مقدار 1000 را تایپ می کنیم به این معنی که این دستگاه مجازی یک گیگابایت حافظه خواهد داشت(ممکن است روی برخی از سیستم ها با تایپ کردن عدد 1000 در زمان زدن دکمه Create AVD در پایان کار نرم افزار هنگ کند. چنانچه چنین اتفاقی روی داد، اکلیپس را بسته مجدد آن را اجرا نموده و این بار عدد به مراتب کوچکتری همچون 100 را برای SD Card در نظر بگیرید).

گزینه بعدی Snapshot است که از اهمیت بسزایی در آماده سازی دستگاه مجازی اندروید دارد. معنی لغوی این واژه "عکس فوری" است. در دستگاه مجازی این گزینه حاکی از آن است که وقتی Emulator را ببندیم و بخواهیم مجدد آن را اجرا کنیم چنانچه گزینه Enabled به معنی "فعال" مربوط به Snapshot تیک نخورده باشد تقریبا زمان قابل توجهی به طول خواهد انجامید تا Emulator دوباره بالا بیاد اما چنانچه این گزینه تیک خورده باشد ظاهراً اطلاعاتی از Emulator در حافظه ذخیره می شود که پس از بستن آن و اجرای مجدد دیگر نیازی نخواهد داشت تا از ابتدا Emulator را اجرا کند. این گزینه را حتماً تیک می زنیم.

تا این مرحله از کار می بایست همانند تصویر زیر پنجره مربوط به ساخت Emulator تکمیل شده باشد:


920510-a17-IMAGE 4.jpg

همانطور که تصویر فوق مشاهده می شود بخش Hardware به معنی "سخت افزار" با یک بیضی قرمز رنگ نشان داده شده است. در واقع این دو گزینه که به صورت خودکار وارد شده اند نشانگر تنظیمات مربوط به نوع سخت افزار ابزار Emulator می باشند. چنانچه تمایل داشته باشیم خصوصیات سخت افزاری دیگر به ماشین مجازی خود بیافزاییم، اینکار را می توان با کلیک کردن بر روی دکمه New که با فلش قرمز رنگ مشخص شده است انجام دهیم.

در این مرحله ساخت ماشین مجازی به پایان رسیده است اما همانطور که در تصویر فوق مشاهده می شود در پایین پنجره یک علامت ضربدر با دایره ای قرمز رنگ مشخص شده است. در حقیقت این علامت به ما اخطار می دهد که در نام انتخابی برای ماشین مجازی خود از علامت های غیر مجاز استفاده کرده ایم. به عبارت دیگر ما مجاز نیستیم که از Space در نام Emulator استفاده کنیم. برای رفع این مشکل، کلیۀ فاصله ها در نام انتخابی را با Dash جایگزین می کنیم:


920510-a17-IMAGE 5.jpg

همانطور که در تصویر فوق مشاهده می شود، نام ماشین مجازی اصلاح شده و به نام AVD-2.1-Version تغییر یافته و اکلیپس هم دیگر ایرادی از ما نمی گیرد. حال با کلیک روی دکمه Create AVD می توانیم ماشین مجازی را بسازیم:


920510-a17-IMAGE 6.jpg

همانطور که در تصویر فوق مشاهده می شود تا اینجای کار توانسته ایم یک ماشین مجازی اندروید تحت عنوان AVD-2.1-Version بسازیم. در تصویر زیر با دایره ای قرمز رنگ دو دکمه Edit و Delete به ترتیب به معانی "ویرایش کردن" و "حذف کردن" مشخص شده اند:


920510-a17-IMAGE 7.jpg

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

شنبه 28 دی 1392  10:59 AM
تشکرات از این پست
amin_j
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

آموزش برنامه نویسی اندروید - قسمت ۱۸: اجرای Emulator و تست اولین اپلیکیشن

نحوه اجرای ماشین مجازی اندروید

در آموزش قسمت هفدهم مشاهده کردیم که پس از ساخت یک AVD در محیط برنامه نویسی اکلیپس، نام AVD ساخته شده در پنجره Android Virtual Device Manager به صورت زیر خواهد آمد:


920510-a18-IMAGE 1.jpg

حال با یک بار کلیک کردن روی AVD ساخته شده تحت عنوان AVD-2.1-Version به رنگ آبی در خواهد آمد. اکنون همانطور که در تصویر فوق با یک فلش قرمز رنگ نشان داده شده است، برای اجرای این ماشین مجازی روی دکمه Start کلیک می کنیم.

پس از کلیک کردن روی گزینه Start با پنجره جدیدی به شکل زیر مواجه خواهیم شد:


920510-a18-IMAGE 2.jpg

این پنجره حاوی اطلاعاتی پیرامون تنظیمات ماشین مجزای است که در قسمت آموزشی قبل مشخص کردیم. به طور مثال همانطور که در آموزش پیشین در پنجره مربوط به ساخت Emulator در بخش Built-in گزینه Default پیش فرض که WVGA800 بود را انتخاب کردیم، در پنجره فوق این گزینه در بخش Skin نمایش داده شده و حتی ابعداد واقعی این ابزار نیز مقابل آن نوشته شده است که 480 در 800 است. اگر خاطرمان باشد در آموزش گذشته در بخش مربوط به Hardware یکسری تنظیمات به صورت خودکار وارد پنجره شده بود که یکی از آن تنظیمات مربوط به رزولوشن صفحه نمایش بود که آن گزینه نیز در پنجره فوق در بخش Density به صورت High با رزولوشن 240 dpi آمده است.

در پنجره فوق گزینه ای تحت عنوان Scale display to real size به معنی "تغییر اندازه صفحه نمایش به اندازه واقعی دستگاه" وجود دارد. با انتخاب این گزینه تنظیمات داخل کادر قرمز رنگ در تصویر فوق فعال خواهند شد. در حقیقت کاری که این تنظیمات انجام می دهند این است که اندازه Emulator را می توان از طریق آنها به اندازه یک دستگاه واقعی تبدیل کرد و در صورتیکه این گزینه را انتخاب نکنیم ابزار Emulator در قالب یک پنجره بزرگ روی صفحه به نمایش در خواهد آمد. از آنجا که می خواهیم صفحه بزرگی در اختیار داشته باشیم، این گزینه را تیک دار نمی کنیم.

گزینه بعدی در این پنجره Wipe user data به معنی "پاک کردن اطلاعات کاربری" است. فرض کنیم که یک دستگاه Emulator ساخته ایم و آن را برای پروژه های مختلفی استفاده کرده ایم و برای تست کردن اپلیکیشن ها برخی از تنظیمات Emulator را تغییر داده ایم. زمانیکه می خواهیم Emulator را استفاده کنیم برای آنکه به تنظیمات اولیه Emulator مجدد دست پیدا کنیم و دیگر تغییرات ایجاد شده را مشاهده نکنیم می بایست این گزینه را تیک بزنیم اما از آنجا این اولین باری است که می خواهیم Emulator را اجرا کنیم مسلماً هیچ تنظیماتی را دستکاری نکرده ایم که بخواهیم آن را به حالت اولیه بازگردارنیم از این رو این گزینه را تیک نمی زنیم.

گزنیه بعدی Launch from snapshot به معنی "اجرا کردن از روی snapshot" است. اگر خاطرمان باشد در آموزش پیش که اقدام به ساخت Emulator کردیم، گزینه Enabled را در بخش Snapshot تیک زده و توضیح دادیم که وظیفه آن چیست. اکنون در این مرحله نیز این امکان برای ما فراهم شده است که با تیک زدن Launch from snapshot ماشین مجازی خود را از روی snapshot اجرا کنیم و در صورتیکه بخواهیم ماشین مجازی را اصطلاحاً Reboot کنیم می بایست تیک این گزینه را بر داریم.

آخرین گزینه تحت عنوان Save to snapshot به معنی "ذخیره کردن اطلاعات روی "snapshot این وظیفه را داراست که در صورت فعال بودن آخرین تنظیمات، تغییرات و حالات Emulator را روی snapshot ذخیره سازد تا در اجرای بعدی Emulator از آنها استفاده شود (لازم به ذکر است که اینکار به مراتب زمان بالا آمدن دستگاه مجازی را کوتاه می سازد. بنابراین همواره توصیه می شود که این گزینه را تیک دار نماییم).

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


920510-a18-IMAGE 3.jpg

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


920510-a18-IMAGE 4.jpg

همانطور که در تصویر فوق با یک فلش قرمز رنگ نشان داده شده است، پروژه My First Android Project انتخاب شده است، از این روی دایرکتوری این پروژه به رنگ آبی در آمده است. حال زمانی نشانگر موس خود را روی دکمه Run که در تصویر فوق با یک مستطیل قرمز رنگ نشان داده شده است قرار دهیم، می بینیم که عبارت Run My First Android Project به معنی "پروژه My First Android Project را اجرا کن" ظاهر می شود(این عبارت با یک خط افقی قرمز رنگ مشخص شده است). در حقیقت از آنجا که ما از قبل پروژه خود را انتخاب کرده ایم محیط برنامه نویسی اکلیپس متوجه می شود که ما قصد داریم کدام پروژه خود را اجرا نماییم. حال به محض کلیک کردن روی دکمه Run خواهیم دید که اولین پروژه اندروید ما روی Emulator اجرا خواهد شد(لازم به ذکر است گاهی اوقات ممکن است پس از کلیک کردن روی گزینه Run اپلیکیشن بلافاصله اجرا نگردد و پنجره کوچک دیگری باز گردد که در این صورت می بایست گزینه Android Application را از لیست انتخاب کرده و روی گزینه OK کلیک نماییم):


920510-a18-IMAGE 5.jpg

در واقع تصویر فوق نشانگر اجرای تنها Activity موجود در پروژه ما است که در حین ساخت پروژه خود در جلسه هشتم آن را ایجاد کردیم. محیط برنامه نویسی اکلیپس به صورت خودکار یک Layout تحت عنوان main به معنی اصلی ایجاد کرده و آن را در کلاس Activity ایجاد شده توسط ما فرا می خواند. به عبارت دیگر این Layout ایجاد شده همانطور که در تصویر فوق مشاهده می شود دارای یک رنگ پس زمینه مشکی با یک Text Box حاوی جمله Hello World, MainActivity! به معنی "سلام دنیا" است که به رنگ خاکستری نوشته شده است.


تاریخچه عبارت Hello World

آقای Brian Kernighan در سال 1972 در حین نوشتن دفترچه راهنمای زبان برنامه نویسی B اولین برنامه ای که خروجی آن عبارت Hello World! به معنی "سلام دنیا!" بود را با Syntax زیر نوشت:


  1. main( ) {
  2. extrn a, b, c;
  3. putchar(a); putchar(b); putchar(c); putchar('!*n');
  4. }
  5. a 'hell';
  6. b 'o, w';
  7. c 'orld';

از آن پس برای برنامه نویسان کل دنیا نوشتن اولین برنامه خود در هر زبانی که خروجی آن عبارت Hello World! باشد به عنوان یک استاندارد در آمد که ما هم از این قاعده مستثنی نخواهیم بود! در آموزش بعد با نحوه اجرای اولین پروژه اندروید خود روی یک تلفن همراه واقع و همچنین اعمال یکسری تغییرات در محیط اکلیپس برای سهولت کار با آن در حین توسعه اندروید خواهیم پرداخت.

شنبه 28 دی 1392  11:00 AM
تشکرات از این پست
amin_j
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

آموزش برنامه نویسی اندروید - قسمت ۱۹: اجرای پروژه روی یک دستگاه واقعی

نقاط ضعف یک ماشین مجازی

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


نقطه قوت یک دستگاه مجازی

درست است که یک Emulator از دید نگارندۀ این آموزش دارای نقاط ضعف زیادی است اما برشمردن یک ویژگی مهم Emulator در ارتباط با یک دستگاه واقعی خالی از لطف نیست. به عبارت دیگر ما به عنوان یک توسعه دهنده اپلیکیشن موظف هستیم اپلیکیشنی طراحی کنیم روی اکثر دستگاه های موجود در دست کاربران در جامعه دارای ظاهری مناسب بوده و UI آن از یک دستگاه نسبت به دستگاه دیگر دارای حداقل تفاوت باشد.

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

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


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

به منظور تست کردن اپلیکیشن خود روی تلفن همراه سه سری تنظیمات می بایست انجام داد. اول آنکه نرم افزار Companion اتصال دستگاه به کامپیوتر را روی سیستم خود نصب کنیم. برخی دستگاه ها دارای یک دی وی دی نصب این نرم افزار هستند و نرم افزار برخی دیگر از دستگاه ها را می بایست از وب سایت شرکت سازنده دانلود کرد. متأسفانه از ارائه آموزش در این زمینه خودداری می کنیم چرا شرکت های مختلف دارای نرم افزارهای Companion متفاوتی هستند و ارائه آموزش برای کلیه برندهای امکان پذیر نیست.

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


920520-a19-IMAGE 1.jpg

سری دوم تنظیمات مربوط به خود دستگاه اندرویدی است. برای این منظور اول همانند تصویر زیر دکمه Menu تلفن همراه خود را می زنیم:


920520-a19-IMAGE 2.jpg

سپس همانطور که در تصویر فوق نشان داده شده است دکمه Settings به معنی "تنظیمات" را زده و از میان گزینه های موجود در Settings روی گزینه Applications به معنی "اپلیکیشن ها" کلیک می کنیم:


920520-a19-IMAGE 3.jpg

پس از کلیک کردن روی گزینه Applications صفحه ای به صورت زیر خواهیم دید:


920520-a19-IMAGE 4.jpg

در این صفحه می بایست روی گزینه Development به معنی "توسعه" کلیک کرده و متعاقباً صفحه ای به صورت زیر خواهیم دید:


920520-a19-IMAGE 5.jpg

همانطور که در تصویر فوق مشاهده می شود گزینه USB debugging به معنی "مشکل یابی از طریق کابل "USB غیر فعال است. با فعال کردن این گزینه تلفن همراه ما برای تست کردن اپلیکیشن ها آماده شده است:


920520-a19-IMAGE 6.jpg

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

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

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


920520-a19-IMAGE 7.jpg

920520-a19-IMAGE 7.jpg

همانطور که در تصویر فوق مشخص است، از بخش منوی اصلی اکلیپس وارد گزینه Window سپس گزینه Show View شده و در نهایت روی گزینه Devices به معنی "دستگاه ها" کلیک می کنیم. پس از کلیک کردن روی این گزینه پنجره ای به شکل زیر مشاهده خواهد شد:


920520-a19-IMAGE 8.jpg

در پنجره فوق گزینه شماره یک نشانگر Emulator یی است که در مرحله قبل ساختیم و کلمه Online نشانگر این مسئله است که این دستگاه مجازی فعال است. سپس مقابل آن نامی که در حین ساخت برای دستگاه مجازی تحت عنوان AVD-2.1-Version انتخاب کردیم نشان داده شده است.

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

حال همانطور که در قسمت آموزشی گذشته توضیح داده شد، برای اجرای اپلیکیشن خود می بایست روی دکمه Run به معنی "اجرا کردن" به صورت زیر کلیک کنیم:


920520-a19-IMAGE 9.jpg

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


920520-a19-IMAGE 10.jpg

همانطور که ملاحظه می شود در این پنجره هر دو دستگاه نمایش داده شده اند. با کلیک کردن روی گزینه مورد نظر و آبی شدن آن به اکلیپس می گوییم که قصد داریم پروژه را روی گزینه انتخاب شده اجرا کنیم. حال می توانیم دکمه OK را کلیک کنیم. اما پیش از کلیک کردن، گزینه Use same device for future launches که در تصویر فوق با یک بیضی قرمز رنگ مشخص شده است به معنی "از این دستگاه برای اجراهای آینده استفاده کن" را می توانیم تیک بزنیم تا اکلیپس به طور خودکار دستگاه مد نظر ما را در اجراهای آینده مد نظر قرار داده و دیگر مجبور نباشیم این پنجره را تنظیم کنیم.

اکنون به محض زدن دکمه OK همانطور که در تصویر زیر مشاهده می شود پروژه ابتدا روی دستگاه موبایل بنده نصب شده سپس به صورت خودکار اجرا می گردد:


920520-a19-IMAGE 11.jpg

پس از اجرای اپلیکیشن چنانچه به لیست اپلیکیشن های گوشی خود مراجعه کنیم، خواهیم دید که اپلیکیشنی با نام My First Android Project با لوگوی معروف گوگل در کنار دیگر اپلیکیشن ها قرار گرفته است.

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

شنبه 28 دی 1392  11:02 AM
تشکرات از این پست
amin_j
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

آموزش برنامه نویسی اندروید - قسمت ۲۰: شخصی سازی محیط اکلیپس برای کاربری آسانتر

معرفی Perspective در محیط اکلیپس

به طور کلی در اکثر برنامه های معروف مثل فتوشاپ و غیره محیط کلی نرم افزار Workspace به معنی "محل کار" نامیده می شود. اما در محیط برنامه نویسی اکلیپس، به محیطی از این نرم افزار که در آن برنامه نویسی می کنیم Workspace گفته نمی شود بلکه این محیط Perspective به معنی "چشم انداز" یا "منظره" نامیده می شود:


920522-a20-IMAGE 1.jpg

همانطور که در تصویر فوق نمایش داده شده است، محیط کلی اکلیپس Perspective نامیده می شود.


باز کردن پنجره های مورد نیاز برای توسعه اندروید

کاری که در این آموزش قرار است انجام دهیم، مجهز کردن محیط برنامه نویسی اکلیپس به ابزارهای لازم و ضروری برای توسعه اندروید است. برای این منظور اولین گام این است که ابزارهای لازم برای توسعه اندروید را در محیط اکلیپس بگنجانیم سپس یک Perspective به نام خود بسازیم به طوریکه کلیۀ این تنظیمات را در خود ذخیره سازد.


920522-a20-IMAGE 2.jpg

محیط برنامه نویسی اکلیپس به طور پیش فرض دارای سه Perspective اصلی تحت عناوین Java و Debug و DDMS است. به طور مثال همانطور که در تصویر فوق مشاهده می شود Perspective جاوا فعال است، این Perspective در برگیرندۀ کلیۀ ابزارهای لازم برای برنامه نویسی یک برنامه جاوا است. به طور کلی کاری که در این آموزش قرار است انجام دهیم این است که پنجره های لازم برای توسعه اندروید را باز کرده سپس آن ها را در قالب یک Perspective جدید تحت عنوان Behzad ذخیره می سازیم(در واقع علت اینکه نام Behzad را در نظر گرفتم این است که این Perspective را متعلق به خود بدانم. توصیه می شود علاقمندان این Perspective را به نام خودشان ذخیره سازند).

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


920522-a20-IMAGE 3.jpg

همانطور که در تصویر فوق مشاهده می شود، برای دسترسی به کلیۀ پنجره های محیط برنامه نویسی اکلیپس بایستی از منوی اصلی وارد Window شده سپس روی گزینۀ Show View کلیک کرده و پنجره ای جدید باز خواهد شد(در تصویر فوق با یک مستطیل قرمز رنگ نشان داده شده است). در این پنجره لیستی از پنجره ها دیده می شوند که در صورتیکه روی هر کدام از آنها کلیک کنیم باز خواهد شد. اما برای ادامه کار به یکسری دیگر از پنجره ها نیاز داریم که در این لیست وجود ندارند. برای دسترسی به آنها همانطور که در تصویر فوق با یک فلش قرمز رنگ نشان داده شده است، می بایست روی گزینه Other به معنی "دیگر موارد" کلیک کنیم.

به محض کلیک روی این گزینه پنجره ای به شکل زیر باز خواهد شد:


920522-a20-IMAGE 4.jpg

از طریق این پنجره به کلیۀ بخش های محیط برنامه نویسی اکلیپس دسترسی پیدا خواهیم کرد. از میان گزینه های موجود در این پنجره، روی گزینه General کلیک کرده و همانطور که در تصویر زیر نشان داده شده است روی گزینه Properties به معنی تنظیمات کلیک می کنیم:


920522-a20-IMAGE 5.jpg

پس از کلیک کردن روی این گزینه، دکمه OK فعال خواهد شد که با کلیک روی آن پنجره فوق بسته شده و به محیط اصلی اکلیپس باز گشته در حالی که پنجره Properties به محیط برنامه نویسی اکلیپس اضافه شده است:


920522-a20-IMAGE 6.jpg

اکنون مجدداً از روشی که در بالا توضیح داده شده به پنجره قبل رفته سپس پوشه General را بسته و روی گزینه Android کلیک کرده تا موارد زیر شاخه آن نمایان شوند:


920522-a20-IMAGE 7.jpg

از میان زیرشاخه های Android به Devices و LogCat نیاز داریم، بنابراین هر دوی آنها را به محیط اکلیپس طبق روش بالا اضافه می کنیم:


920522-a20-IMAGE 8.jpg

همانطور که در تصویر فوق مشاهده می شود، هر سه پنجره جدید وارد اکلیپس شده اند اما این در حالی است که جایگاه این پنجره ها و همچنین پنجره Package Explorer مناسب نیست و بایستی جای آن ها را تغییر دهیم.


920522-a20-IMAGE 9.jpg

همانطور که در تصویر فوق نشان داده شده است، موس خود را روی نام Package Explorer گذاشته کلیک کرده و آن را هم زمان با نگه داشتن دکمه موس کشیده و کنار پنجره Outline رها می کنیم:


920522-a20-IMAGE 10.jpg

همانطور که در تصویر فوق مشخص است، پنجره Package Explorer در کنار پنجره Outline قرار می گیرد. سپس پنجره Properties را گرفته و همانند تصویر زیر در کنار Package Explorer قرار می دهیم:


920522-a20-IMAGE 11.jpg

در آخرین مرحله، همانند تصویر زیر پنجره Devices را گرفته و در کنار دیگر پنجره ها قرار می دهیم:


920522-a20-IMAGE 12.jpg

در این مرحله محیط اکلیپس می بایست به صورت زیر باشد:


920522-a20-IMAGE 13.jpg

در تصویر فوق، بخشی که با مستطیل قرمز رنگ مشخص شده است جایی است که هر فایل پروژه خود را که باز کنیم در آن نمایش داده خواهد شد. گزینه شماره یک تحت عنوان Problems به معنی "مشکلات" این وظیفه را دارا است که اگر برنامه ما دارای مشکلی بود، نوع مشکل به همراه جایی در کد که آن مشکل از آنجا ناشی می شود را به ما نشان می دهد. گزینه شماره دو تحت عنوان LogCat کاری همچون پنجره Console در برنامه نویسی جاوا انجام می دهد. به عبارت دیگر یکی از کارهایی که LogCat انجام می دهد نشان دادن خروجی کدهایی است که می نویسیم. گزینه شماره سه تحت عنوان Package Explorer همانطور که قبلاً گفته شد لیست پروژه ها و زیرشاخه های آن ها را به ما نشان می دهد. گزینه شماره چهار تحت عنوان Outline به معنی "طرح کلی" به منزله پنجره ای است که لیست عناصر روی UI یا همان رابط گرافیکی کاربر را نشان خواهد داد. گزینه شماره پنج یا Properties به معنی "تنظیمات"، پنجره ای است که تنظیمات مربوط به عناصر روی UI را تنظیم خواهد کرد. گزینه شماره شش یا Devices به معنی "دستگاه ها" نشانگر دستگاه هایی است که می توان از آن طریق اپلیکیشن خود را تست کرد. در طول آموزش ها چنانچه به پنجره دیگری نیاز داشته باشیم بسته به نیاز خود آن را باز خواهیم کرد.


ساخت یک Perspective به نام خود

حال که محیط برنامه نویسی اکیپس را برای توسعه اپلیکیشن های خود شخصی سازی کرده ایم، می توانیم این محیط جدید را به شکل یک Perspective ذخیره سازیم. برای این منظور از منوی اصلی روی گزینه Window کلیک کرده سپس روی گزینه Save Perspective As … به معنی "ذخیره سازی منظره به عنوان ..." کلیک می کنیم:


920522-a20-IMAGE 14.jpg

سپس پنجره ای به صورت زیر باز خواهد شد:


920522-a20-IMAGE 15.jpg

همانطور که در تصویر فوق مشاهده می کنیم، مقابل Name نام مد نظر خود برای این Perspective جدید می نویسیم(در این Perspective بنده نام Behzad را انتخاب کرده ام). حال می توانیم روی دکمه OK کلیک کنیم:


920522-a20-IMAGE 16.jpg

همانطور که در تصویر فوق مشاهده می کنیم، در کنار Perspective های پیش فرض اکلیپس Perspective جدید ما تحت عنوان Behzad قرار گرفته است.

نکته مثبت دیگری که در مورد Perspective ها وجود دارد این است که اگر سهواً پنجره ای را ببندیم و یا جای پنجره ای را تغییر داده سپس بخواهیم Perspective را به حالت اولیه خود در آوریم می توانیم این کار را از طریق گزینه Window در منوی اصلی سپس زیرشاخه Reset Perspective این کار را انجام دهیم:


920522-a20-IMAGE 17.jpg

پس از کلیک کردن روی گزینه ای که در تصویر فوق با یک فلش قرمز رنگ نشان داده شده است پنجره زیر نمایان خواهد شد:


920522-a20-IMAGE 18.jpg

در این پنجره این سوال از ما پرسیده می شود که "آیا واقعاً قصد داریم که Perspective مربوط به Behzad را به حالت پیش فرض بازگردانیم؟" که سپس می بایست روی گزینه Yes کلیک کنیم و مشاهده خواهیم کرد که کلیه پنجره ها سرای جای خود باز خواهند گشت.


نکته پایانی

زمان های زیادی در برنامه نویسی برای ما پیش خواهد آمد که بدون آنکه بدانیم ریشۀ مشکلی در کجاست محیط برنامه نویسی Error می دهد و آنقدر این Error ها ادامه پیدا می کنند که در نهایت مجبور می شویم محیط برنامه نویسی را Uninstall کرده مجدداً آن را نصب نماییم. از آنجا که محیط برنامه نویسی اکلیپس نیازی به نصب ندارد، از اینرو نیازی به Uninstall هم نداشته و فقط با پاک کردن فولدر اصلی اکلیپس می توانیم آن را از سیستم خود حذف کنیم.

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

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

شنبه 28 دی 1392  11:04 AM
تشکرات از این پست
ravabet_rasekhoon amin_j
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

آموزش برنامه نویسی اندروید - قسمت ۲۱: چرا باید کار با اندروید استودیو را فرا گرفت ولی نباید با آن کا

چرا بایستی توسعه اپلیکیشن با اندروید استودیو را یاد بگیریم؟

در این قسمت قصد داریم تا به مزایای محیط برنامه نویسی اندروید استودیو اشاره ای داشته باشیم. اندروید استودیو رایگان است و برای دانلود و شروع کار با آن هیچ هزینه ای نیاز نیست بپردازیم(اگر چه که در اینجا حتی فتوشاپ هم رایگان است اما اندروید استودیو واقعاً رایگان است). یکی از مزیت های اندروید استودیو بر محیط برنامه نویسی اکلیپس این است که نیازی نیست تا SDK و ADT را روی آن نصب کنیم بلکه از قبل این کار توسط گوگل روی آن صورت گرفته است(البته همانطور که در مقدمه این سری از آموزش ها بیان شد، محیط توسعه اندروید ADT Bundle نیز همین شرایط را دارا است).

با فعال کردن Preview All Screen Sizes در اندروید استودیو این امکان برای ما فراهم خواهد شد تا بتوانیم به طور همزمان خروجی اپلیکیشن خود در سایزهای مختلف را مشاهده کنیم:


920528-a21-IMAGE 1.jpg

تصویر فوق نمایی از Preview All Screen Sizes پروژه My First Android Project است که در قسمت ششم از این سری از آموزش ها ایجاد کردیم. در حقیقت این ویژگی اندروید استودیو امکانی را برای ما فراهم می آورد که بتوانیم UI اپلیکیشن خود را به صورت هم زمان روی دستگاه هایی با ابعدا مختلف مشاهده کنیم(البته کلیه مدل های استفاده شده مربوط به برند Nexus می باشند).

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

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

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

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


920528-a21-IMAGE 2.jpg

چرا نمی بایست در توسعه اندروید روی اندروید استودیو تمرکز کنیم!

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


روشی به منظور ارتقاء سرعت اجرای اندروید استودیو

به عنوان راه کاری که از آن طریق می توان سرعت اندروید استودیو را تا حدودی ارتقاء بخشید می توان به غیر فعال کردن گزینه Real-time file system protection به معنی "محافظت از فایل های سیستم به صورت هم زمان" در نرم افزار آنتی ویروس نصب شده روی سیستم اشاره کرد. در حقیقت زمانیکه این گزینه فعال باشد، هر موقع که اقدام به اجرای پروژه خود در اندروید استودیو می کنیم، کلیه فایل های موجود در Output Directory یا "دایرکتوری خروجی برنامه" اسکن می شوند و همین مسئله موجب می گردد که سرعت توسعه اپلیکیشن به مراتب پایین تر آید. اعمال این تنظیمات بسته به نوع آنتی ویروسی که استفاده می کنیم می تواند متفاوت باشد اما برای مثال در آنتی ویروس ESET Smart Security 4 این تغییرات به صورت زیر صورت خواهد گرفت:


920528-a21-IMAGE 3.jpg

همانطور که در تصویر فوق مشاهده می شود، وارد Setup آنتی ویروس شده و از بخش Real-time file system protection همانطور که در تصویر فوق با بیضی قرمز رنگ مشخص شده است روی گزینه Configure به معنی "تنظیم کردن" کلیک می کنیم و سپس پنجره ای به شکل زیر خواهیم دید:


920528-a21-IMAGE 4.jpg

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

دوشنبه 30 دی 1392  9:23 AM
تشکرات از این پست
amin_j
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

آموزش برنامه نویسی اندروید - قسمت ۲۲: نحوه ساخت ماشین مجازی در اندروید استودیو

نحوه ساخت ماشین مجازی در اندروید استودیو

برای ایجاد یک ابزار AVD در محیط توسعه اپلیکیشن اندروید استودیو می بایست همانطور که در تصویر زیر نشان داده شده است، از منوی اصلی نرم افزار وارد گزینه Tools به معنی "ابزارها" شده سپس وارد زیرشاخه Android و در نهایت روی گزینه AVD Manager کلیک نماییم:


920530-a22-IMAGE 1.jpg

پس از کلیک کردن روی این گزینه، پنجره ای به شکل زیر مشاهده خواهد شد:


920530-a22-IMAGE 2.jpg

اگر خاطرمان باشد این پنجره دقیقاً شبیه به پنجره ساخت Emulator در اکلیپس است. از سوی دیگر نکته جالب توجه اینجا است که ماشین مجازی ساخته شده در محیط برنامه نویسی اکلیپس در این پنجره نیز نشان داده می شود با این تفاوت که کنار اسم ماشین مجازی یک علامت ضربدر قرمز رنگ خورده است که این علامت نشانگر وجود مشکلی در این ماشین مجازی است. برای اینکه ببینیم مشکل در کجاست، روی نام این ماشین مجازی کلیک کرده سپس دکمه Edit را می زنیم و پنجره ای به شکل زیر مشاهده خواهیم کرد:


920530-a22-IMAGE 3.jpg

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


920530-a22-IMAGE 4.jpg

با انتخاب این گزینه مشکل ماشین مجازی رفع خواهد شد و می توانیم از همین ماشین مجازی که در اکلیپس ساختیم در اندروید استودیو هم استفاده کنیم و همانطور که در تصویر زیر مشخص است یک تیک سبز کنار نام ماشین مجازی خواهد خورد به این معنی که این ماشین مجازی آماده اجرا است:


920530-a22-IMAGE 5.jpg

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


920530-a22-IMAGE 6.jpg

تصویر فوق مربوط به محیط اکلیپس است. در حقیقت از آنجا که در محیط اکلیپس نسخه سیستم عامل این ماشین مجازی را نسخه 2.1 قرار داده بودیم، اکلیپس متوجه می شود که این ماشین مجازی ویرایش شده و نسخه سیستم عامل اندروید 4.2.2 برای آن درنظر گرفته شده است و از آنجا که ما در محیط اکلیپس SDK مربوط به نسخه سیستم عامل اندروید 4.2.2 را نداریم از این رو اکلیپس این ماشین مجازی که خود ساخته بود را دیگر نخواهد شناخت. راه کار اول برای رفع این مشکل این است که همانطور که در تصویر زیر مشخص است مجدد در اکلیپس در پنجره فوق این ماشین مجازی را انتخاب کرده سپس روی دکمه Edit کلیک کنیم و از بخش Target نسخه سیستم عامل اندروید 2.1 را انتخاب نماییم:


920530-a22-IMAGE 7.jpg

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

راه کار دوم برای رفع این مشکل این است که کاری به ماشین مجازی ساخته شده در اکلیپس نداشته باشیم و اقدام به ساخت یک Emulator جدید مختص به اندروید استودیو نماییم:


920530-a22-IMAGE 8.jpg

همانطور که در تصویر فوق با یک بیضی قرمز رنگ مشخص شده است، Tab یی تحت عنوان Android Virtual Device به معنی "ماشین مجازی اندروید" دقیقاً شبیه به مراحل ساخت ماشین مجازی در اکلیپس است.


به کار گیری ماشین های مجازی از پیش تعریف شده

ابتدا به تصویر زیر توجه کنید:


920530-a22-IMAGE 9.jpg

در این تصویر در کنار Tab مربوط به Android Virtual Device یک Tab دیگری تحت عنوان Device Definitions به معنی "دستگاه های از پیش تعریف شده" وجود دارد که با یک بیضی قرمز رنگ مشخص شده است در این Tab دستگاه های مجازی از پیش تعریف شد ای وجود دارند که توسعه دهنده با استفاده از هر کدام از اینها دیگر نیازی ندارد تا کلیه تنظیمات را خود انجام دهد(اطلاعاتی همچون اندازه صفحه هر کدام و همچنین مقدار RAM اختصاص داده شده به هر دستگاه نشان داده شده است). به طور مثال در تصویر فوق گزینه اول انتخاب شده است که به رنگ آبی در آمده است که Nexus S نام دارد. حال با کلیک کردن روی گزینه Create AVD که در تصویر فوق با یک فلش قرمز رنگ مشخص شده است می توان به پنجره تنظیمات رفته و آن را طبق نیاز خود Customize کرد و کار ساخت یک ماشین مجازی را به پایان رساند. از جمله کارهایی در که در Customize کردن می توان انجام داد می شود به تغییر نام ماشین مجازی اشاره کرد.

اما چنانچه بخواهیم یک ماشین مجازی را خود از ابتدا بسازیم، می بایست مجدد به Tab مربوط به Android Virtual Device رفته سپس روی گزینه New کلیک نماییم. اکنون بایستی مطابق تصویر زیر عمل کنیم:


920530-a22-IMAGE 10.jpg

همانطور که در فوق مشاهده می شود، کلیه تنظیمات این پنجره همانند پنجره مربوط به ساخت ماشین مجازی در اکلیپس است به علاوه یکسری تفاوت که به توضیح تک تک آنها خواهیم پرداخت. نام انتخابی برای این ماشین مجازی را AndroidStudioAVD به معنی "ماشین مجازی اندروید استودیو" گذاشته شده و همانطور که در تصویر فوق با یک بیضی قرمز رنگ مشخص شده است با تیک دار کردن این گزینه ها می توان دکمه های سخت افزاری را روی این ماشین مجازی را نشان داد. در قسمت پایینی این پنجره همانطور که با یک فلش قرمز رنگ نشان داده شده است، اندروید استودیو اخطاری به ما داده مبنی بر اینکه "در سیستم عامل ویندوز، با انتخاب مقدار RAM بیش از 768 در حین اجرا با مشکل مواجه خواهید شد، از اینرو بایستی مقدار کمتری را وارد نمایید".

همانطور که در تصویر فوق با یک کادر قرمز رنگ مشخص شده است، مقدار 1907 وارد شده است که بایستی این عدد به کمتر از 768 تقلیل یابد. بنابراین عدد کمتری مثل 500 را وارد می کنیم و تنظیمات ما به صورت زیر در خواهد آمد(مقدار مرتبط با RAM و SD Card بسته به سخت افزار کامپیوتری که با آن کار می کنیم می تواند تحت تاثیر قرار گیرد. در صورتیکه در حین اجرای Emulator با مشکل مواجه شدید می توانید این مقادیر را کاهش دهید):


920530-a22-IMAGE 11.jpg

آپشن جدید که در پنجره مربوط به ساخت یک دستگاه مجازی در اندروید استودیو وجود دارد، گزینه مربوط به GPU است که در تصویر فوق با یک بیضی قرمز رنگ نشان داده شده است. به طور خلاصه می توان گفت که GPU مخفف واژگان Graphical Processing Unit به معنی "واحد پردازشگر گرافیکی" است. در واقع با تیک زدن این گزینه می توان شاهد تصاویر صاف تر بود. نکته ای که در ارتباط با تیک زدن این گزینه می بایست همواره مد نظر داشته باشیم این است که نمی توانیم به طور هم زمان هم گزینه Use Host GPU و هم گزینه Snapshot را تیک زد.

دوشنبه 30 دی 1392  9:24 AM
تشکرات از این پست
amin_j
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

آموزشی برنامه نویسی اندروید- قسمت ۲۳: پنجره های مورد استفاده در برنامه نویسی در اندروید استودیو



اگر خاطرمان باشد در اکلیپس جایی که می توانستیم از آن طریق به پروژه های خود دسترسی پیدا کنیم Package Explorer نامیده می شد. اما پنجره ای که در محیط اندروید استودیو این وظیفه را بر عهده دارد Project نامیده می شود که در تصویر زیر با یک کادر مستطیلی قرمز رنگ نشان داده شده است. به طور کلی می توان گفت که چیدمان فولدرها در اندروید استودیو نسبت به اکلیپس تا حدودی متفاوت است. به عبارت دیگر در محیط برنامه نویسی اکلیپس در زیرشاخه Root Directory یا همان "دایرکتوری اصلی" پروژه ای که ایجاد می کنیم، یک فولدر تحت عنوان src قرار دارد که کلیه پکیج ها و کلاس های جاوای اپلیکیشن ما در آن قرار دارند. فولدر res نیز در همین دایرکتوری اصلی قرار گرفته است.

اما این در حالی است که ساختار فولدرهای تشکیل دهنده یک پروژه در اندروید استودیو تا حدودی متفاوت است. در حقیقت در اندروید استودیو در Root Directory یک دایرکتوری با همان نامی که برای پروژه خود انتخاب می کنیم وجود داشته سپس در همان دایرکتوری اصلی یک دایرکتوری دیگر با همان نام پروژه ای که داشتیم وجود دارد. در زیرشاخه دایرکتوری دوم فولدری تحت عنوان src وجود دارد که داخل آن یک فولدر دیگر به نام main به معنی "اصلی" وجود دارد. داخل فولدر main یک فولدر به اسم java وجود دارد که در برگیرنده کلیه پکیج ها و کلاس های جاوای اپلیکیشن است. علاوه بر فولدر java فولدر دیگر تحت عنوان res نیز در زیرشاخه فولدر main وجود داری که حاوی کلیه منابع مورد استفاده در اپلیکیشن است. برای روشن تر شدن مطالب فوق، تصویر زیر نشان دهنده کلیه این فولدرها در محیط اندروید استودیو است:

920602-a23-IMAGE 1.jpg

همانطور که در تصویر فوق مشاهده می شود فایل بسیار مهم AndroidManifest.xml نیز در زیرشاخه فولدر main قرار گرفته است. اگر این فایل را باز کنیم خواهیم دید که بر خلاف اکلیپس این فایل XML را فقط از طریق کدنویسی می توان ویرایش کرد و این در حالی است که در اکلیپس این فایل دارای پنج Tab مجزا از یکدیگر بود که چهارتای آنها دارای ظاهر گرافیکی بوده و فقط یک مورد از آنها امکان ویرایش کدنویسی را به ما می داد.

برای آنکه بتوانیم یک فولدر جدید در زیرشاخه فولدر res ایجاد کنیم، تصویر زیر را مد نظر قرار داده و طبق آن عمل می کنیم:


920602-a23-IMAGE 2.jpg

در واقع، روی فولدر res کلیک راست کرده سپس روی گزینه New کیک کرده و سپس همانطور که در تصویر فوق با یک بیضی قرمز رنگ نشان داده شده است روی گزینه Android resource directory کلیک می کنیم. پس از کلیک پنجره ای به شکل زیر باز خواهد شد:


920602-a23-IMAGE 3.jpg

در این پنجره در بخش مربوط به Directory name به معنی "نام دایرکتوری" می بایست نام فولدری که می خواهیم بسازیم را وارد کنیم. به طور مثال قصد داریم که یک فولدر برای عکس ها با هر زرولوشنی ایجاد کنیم. برای این منظور نام از پیش تعیین شده drawable را وارد کرده و از بخش Resource type به معنی "نوع منبع ذخیره سازی" گزینه drawable را انتخاب می کنیم. به عبارت دیگر می بایست مابین چیزی که می خواهیم ایجاد کنیم و نوع آن چیز هماهنگی وجود داشته باشد.

در محیط برنامه نویسی اندروید استودیو بخشی بسیار کاربردی تحت عنوان Available qualifiers اضافه شده است. در بخش مربوط به Available qualifiers به معنی "توصیف کننده های موجود" می توانیم گزینه مد نظر را انتخاب کرده و آن را به نامی که در مرحله پیش انتخاب کردیم ضمیمه کنیم. برای روشن شدن مطلب به مثال زیر توجه کنید:


920602-a23-IMAGE 4.jpg

به طور خلاصه، با انتخاب گزینه Language به معنی "زبان" و سپس کلیک کردن روی دکمه ای که در تصویر فوق با یک کادر مستطیلی قرمز رنگ مشخص شده است می توانیم به توصیف کننده های مربوط به زبان های مختلف دنیا دست پیدا کنیم. به طور مثال fa:Persian را برای زبان فارسی انتخاب کرده و می بینیم که به محض انتخاب آن، پسوند fa با پس از قرار گرفته یک Dash به صورت خودکار به ادامه نام انتخابی ما اضافه خواهد شد.

در این قسمت فقط نیاز داریم تا یک فولدر drawable ایجاد کنیم بنابراین به Available qualifiers کاری نداریم. حال پس از کلیک روی دکمه OK خواهیم دید که فولدر ساخته شده به لیست فولدر ها اضافه خواهد شد:


920602-a23-IMAGE 5.jpg

کادری که در تصویر زیر با رنگ قرمز مشخص شده است جایی است که برای نمایش دادن فایل ها است خواه این فایل یک کلاس جاوا باشد خواه یک Layout از جنس XML در این کادر باز خواهد شد:


920602-a23-IMAGE 6.jpg

در تصویر زیر گزینه Android در یک کادر مستطیلی قرمز رنگ مشخص شده است:


920602-a23-IMAGE 7.jpg

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

نکته ای که برای بنده کمی عجیب به نظر می رسد این است که چرا گوگل به چیزی به این سادگی در حین طراحی اندروید استودیو توجه نکرده و آن هم این که مثلا عناوین کل پنجره ها مثل Devices با حرف بزرگ شروع شده اما پنجره logcat نه تنها با حرف بزرگ نوشته نشده است بلکه به صورت camelCase نیز در نیامده است. به هر حال می توان این مسائل را جزو Bug های بی اهمیت این محیط برنامه نویسی تلقی کرد(برای آشنایی بیشتر با اصطلاح camelCase به سری آموزش های جاوا در سایت نردبان قسمت دهم مراجعه نمایید).

چنانچه یک فایل مرتبط با رابط گرافیکی کاربر یا همان GUI باز کنیم، خواهیم دید که پنجره مرتبط با بخش تنظیمات یا همان Properties نمایان خواهد شد:


920602-a23-IMAGE 8.jpg

همانطور که در تصویر فوق مشاهده می شود، می توانیم تنها فایل مربوط به Layout پروژه که فایلی تحت عنوان activity_main.xml است را از زیرشاخه res داخل فولدری به نام layout قرار دارد را باز کنیم. پس از باز کردن این فایل همانطور که در تصویر فوق مشاهده می شود گزینه Designer به معنی "طراح" در یک کادر مستطیلی قرمز رنگ مشخص شده است. پس از کلیک روی آن به پنجره ای که در اکلیپس هم تحت عنوان Properties وجود داشت دست خواهیم یافت که در تصویر فوق با یک بیضی قرمز رنگ نشان داده شده است.

دوشنبه 30 دی 1392  9:26 AM
تشکرات از این پست
amin_j
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

آموزش برنامه نویسی اندروید - قسمت ۲۴: اصول طراحی Launcher Icon

آشنایی با Launcher Icon

پیش از فراگیری برنامه نویسی توسعه اندروید نیاز است تا برخی اصول طراحی در مراحل توسعه یک اپلیکیشن اندرویدی را فرا بگیریم. یکی از بخش های گرافیکی اصلی هر اپلیکیشن Launcher Icon یا همان آیکونی است که کاربران پس از نصب اپلیکیشن ما مشاهده خواهند کرد.

ادامه مطلب را از دست ندهید.


920605-a24-IMAGE 1.jpg

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


اهداف به کار گیری Launcher Icon

اهداف به کار گیری آیکان ها در یک اپلیکیشن بسیارند اما در اینجا به برخی از مهم ترین آنها اشاره خواهیم کرد که عبارتند از:

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

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

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


بایدها و نباید ها در طراحی آیکان

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


920605-a24-IMAGE 2.jpg

همانطور که در تصویر فوق مشاهده می شود تصویر سمت چپ نسبت به تصویر سمت راست دارای جزئیات به مراتب بیشتری است و از همین رو است که در ابعداد کوچک به وضوح قابل درک توسط کاربر نخواهد بود.

همانطور که در مورد سوم از اهداف به کارگیری آیکان ها در قسمت بالا توضیح داده شد، تصویر بکار گرفته شده در آیکان نمی بایست تصویری Cropped شده یا بریده شده از یک تصویر بزرگ تر باشد:


920605-a24-IMAGE 3.jpg

همانطور که در تصویر فوق مشاهده می شود، تصویر سمت چپ نسبت به تصویر سمت راست از جذابیت بصری کمتری برخوردار است.

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


920605-a24-IMAGE 4.jpg

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


فرمت و اندازه آیکان برای صفحه نمایش های مختلف

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


920605-a24-IMAGE 5.jpg

همانطور که در جدول فوق ملاحظه می شود برای صفحه نمایشی با dpi پایین می بایست آیکانی به ابعداد 32 در 32 پیکسل، صفحه نمایشی با dpi متوسط آیکانی با ابعاد 48 در 48 پیکسل، صفحه نمایشی با dpi بالا آیکانی با ابعداد 72 در 72 پیکسل و در نهایت صفحه نمایشی با dpi بسیار بالا آیکانی با ابعداد 96 در 96 پیکسل داشته باشیم.

اکنون با دانستن این ابعاد می توانیم نکته دیگری را هم مد نظر قرار داده و آن اینکه به منظور رعایت فاصله آیکان اپلیکیشن ما با دیگر آیکان ها می توانیم برای آیکان خود Padding در نظر بگیریم. مثلاً اگر بخواهیم آیکانی برای یک صفحه نمایش با Density متوسط طراحی کنیم با استفاده از نرم افزاری همچون فتوشاپ تصویری با پس زمینه Transparent یا شفاف با ابعداد 48 در 48 پیکسل ایجاد کرده و به منظور قرار دادن Padding از هر طرف تصویر خود مثلاً 4 پیکسل را خالی می گذاریم. به عبارت دیگر عکس ما دارای ابعاد 48 در 48 است اما فضای مفید استفاده شده از آن 40 در 40 می باشد.

دوشنبه 30 دی 1392  9:27 AM
تشکرات از این پست
amin_j
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

آموزش برنامه نویسی اندروید - قسمت ۲۵: استفاده از فتوشاپ جهت ساخت تمپلت برای Launcher Icon



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

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

نسخه ای که در این سری از آموزش ها مورد استفاده قرار می دهم نسخه CS6 است اما این در حالی است که برای کار ما که خیلی پیچیده نیست می توان دیگر نسخه های این نرم افزار هم مورد استفاده قرار داد.

برای شروع کار پس اجرای این نرم افزار همانطور که در تصویر زیر نشان داده شده است، از منوی اصلی گزینه File سپس گزینه New را انتخاب می کنیم:

920610-a25-IMAGE 1.jpg

همانطور که در تصویر فوق مشاهده می شود، به جای اینکار می توان با فشردن هم زمان کلید های Ctrl و حرف N اقدام به ایجاد یک پروژه جدید کرد. پس از اینکار پنجره ای به شکل زیر مشاهده خواهد شد:


920610-rs25-IMAGE 2.jpg

همانطور که در پنجره فوق نشان داده شده است در بخش Name به معنی "نام" عبارت ic_launcher را وارد می کنیم(لازم به ذکر است که این نام کاملاً اختیاری است). در بخش Width و Height که به ترتیب "عرض" و "طول" معنی می دهند عدد 96 را وارد کرده و این در حالی است که واحد انتخابی هر دو آنها بایستی Pixel باشد. در بخش Background Contents به معنی "محتویات پس زمینه" از میان گزینه های موجود مورد Transparent به معنی "شفاف، واضح و یا خالی" را انتخاب می کنیم(علت انتخاب این گزینه این است که زمانیکه می خواهیم Padding برای آیکان خود در نظر بگیریم، نواحی حاوی Padding بدون رنگ و شفاف باشند).

همانطور که قبلا توضیح داده شد صفحه های نمایش به طور کلی دارای چهار Density یا "تراکم" مختلف هستند. حال سوالی که ممکن است در اینجا به ذهن خطور کند این است که چرا ما در ابتدا اقدام به ساخت آیکان برای صفحه نمایشی با تراکم بسیار بالا یا به عبارتی صفحه نمایش xhdpi کردیم. در پاسخ به این سوال بایستی گفت که با اینکار مراحل ساخت آیکان را برای خود کاهش خواهیم داد. فرض کنیم که در ابتدا آیکانی به ابعاد 36 در 36 برای صفحه نمایشی با تراکم پایین یا به عبارتی ldpi ایجاد می کنیم. حال اگر بخواهیم پس از تکمیل طراحی، ابعداد تصویر را به طور مثال به 48 در 48 برای mdpi افزایش دهیم، کیفیت آیکان ما تا حدودی کاهش پیدا خواهد کرد و این مسئله در مورد افزایش سایز آیکان به 96 در 96 به مراتب مشهود تر می باشد. اما عکس این قضیه صادق نیست. یعنی اگر در ابتدا آیکانی به ابعاد 96 در 96 پیکسل ایجاد کنیم سپس طرح اولیه را به ترتیب به ابعاد 72 در 72 سپس 48 در 48 و در نهایت به 36 در 36 پیکسل کاهش دهیم، می توانیم انتظار نتایج به مراتب مطلوب تری داشته باشیم.

اکنون با دانستن این نکات می توانیم روی گزینه OK کلیک کرده و تصویر ایجاد شده را مشاهده کنیم:


920610-a25-IMAGE 3.jpg

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

همانطور که در آموزش پیش توضیح دادیم، برای آنکه آیکان اپلیکیشن ما در کنار دیگر آیکان ها خوب جلوه دهد نیاز داریم تا مقداری Padding برای آن در نظر بگیریم. برای این منظور از نوار ابزارها که در سمت چپ فتوشاپ قرار دارد Rectangle Tool یا "ابزار ترسیم مستطیل" را انتخاب می کنیم. پس از انتخاب این ابزار نشانگر موس خود را روی صفحه خالی ایجاد شده قرار داده و دو بار پشت سر هم کلیک می کنیم و سپس پنجره ای به صورت زیر را مشاهده خواهیم کرد:


920610-a25-IMAGE 4.jpg

در این پنجره می توانیم طول و عرض شکلی که می خواهیم ایجاد کنیم را تعریف کنیم. به طور مثال در این آموزش عدد 4 پیکسل را برای هم طول و هم عرض شکل خود در نظر می گیریم. پس زدن گزینه OK تصویر زیر را مشاهده خواهیم کرد:


920610-a25-IMAGE 5.jpg

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


920610-a25-IMAGE 6.jpg

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


920610-a25-IMAGE 7.jpg

همانطور که در تصویر فوق مشاهده می شود با استفاده از ابزار Move Tool به معنی "ابزار جابجایی" مربع قرمز رنگ را به منتها الیه سمت راست تصویر خود کشیده سپس به روش قبل یک خط شبرنگ دیگر یا به اصطلاح یک Guide دیگر مماس با ضلع سمت چپ مربع می کشیم. همین روش را برای قرار دادن Guide های بالایی و پایینی هم تکرار می کنیم و در نهایت تصویر ما به صورت زیر در خواهد آمد:


920610-a25-IMAGE 8.jpg

از آنجا که دیگر به مربع قرمز رنگ در طراحی خود نیازی نداریم، به صورت زیر آن را از تصویر خود حذف می کنیم:


920610-a25-IMAGE 9.jpg

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


920610-a25-IMAGE 10.jpg

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

از این پس می توان این فایل را ذخیره کرده و برای آیکان های اپلیکیشن های اندرویدی خود مورد استفاده قرار دهیم.

دوشنبه 30 دی 1392  9:28 AM
تشکرات از این پست
amin_j
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

آموزش برنامه نویسی اندروید - قسمت ۲۶: شخصی سازی Launcher Icon اولین اپلیکیشن


اگر خاطرمان باشد در آموزش هشتم پروژه خود را My First Android Project به معنی "اولین پروژه اندروید من" نامیدیم. حال اگر بخواهیم تصویری مرتبط با اولین پروژه طراحی کنیم که هم اصول طراحی در آن رعایت شده باشد و در عین حال جذاب، گیرا و تاثیرگذار هم باشد، به نظر می رسد از یک سو چند قسمت آموزش را به خود اختصاص دهد و از سوی دیگر کمی از هدف این سری از آموزش ها که بیشتر با رویکرد برنامه نویسی طراحی شده اند فاصله خواهیم گرفت. برای همین منظور به طرحی کاملاً ساده بسنده خواهیم کرد:

920610-a26-IMAGE 1.jpg

به طور مثال همانطور که در تصویر فوق ملاحظه می شود شکلی آبی رنگ در نظر گرفته شده است. فقط نکته ای که حتما می بایست مد نظر قرار داده شود این است که لبه های شکل ما از Guide های ترسیم شده بیرون نزند.

همانطور که در آموزش پیش توضیح داده شد، فرمت آیکان های اندروید می بایست PNG سی و دو بیتی باشد، از این رو نیاز داریم تا این تصویر را با فرمت PNG ذخیره سازیم.


920610-a26-IMAGE 2.jpg

همانطور که در تصویر فوق مشاهده می شود، از منوی اصلی گزینه File سپس گزینه Save As را انتخاب می کنیم سپس پنجره ای به شکل زیر مشاهده خواهیم کرد:


920610-a26-IMAGE 3.jpg

در این پنجره در بخش File name به معنی "نام فایل" نام ic_launcher که در پروسه ساخت فایل وارد نمودیم آمده است. در بخش Format همانطور که در تصویر فوق با یک بیضی قرمز رنگ مشخص شده است فرمت PNG را انتخاب می کنیم. همانطور که قبلا گفته شده قصد داریم تا این آیکان را جایگزین آیکانی کنیم که خود نرم افزار اکلیپس به صورت پیش فرض برای پروژه ما ساخته است، از این رو پیش از زدن دکمه Save می بایست مسیر ذخیره سازی را به مسیری که در ابتدای نصب اکلیپس برای workspace در نظر گرفتیم، سپس فولدر My First Android Project سپس فولدر res و در نهایت فولدر drawable-xhdpi تغییر داده حال می توانیم دکمه Save را کلیک نماییم(در واقع علت اینکه فولدر drawable-xhdpi را انتخاب کردیم این بود که ابعاد تصویر ما برای صفحه نمایش هایی با تراکم xhdpi می باشد و این فولدر هم مسئول ذخیره سازی تصاویر برای این گروه از صفحه نمایش ها می باشد):


920610-a26-IMAGE 4.jpg

پس از کلیک کردن دکمه Save خواهیم دید که پنجره ای به صورت فوق نمایان می شود که در این صورت تنظیمات پیش فرض را مد نظر قرار داده و دکمه OK را کلیک می کنیم.

اکنون نیاز داریم تا آیکان هایی برای Density هایی معادل با hdpi و mdpi و ldpi به ترتیب با ابعاد 72 در 72 و 48 در 48 و 36 در 36 ایجاد کنیم. برای این منظور ابتدا از hdpi شروع کرده و عکس طراحی شده را به ابعاد 72 در 72 کاهش می دهیم. برای این منظور می بایست به طور هم زمان دکمه های Ctrl و Alt و حرف I را فشار دهیم و خواهیم دید که پنجره ای به شکل زیر باز خواهد شد:


920610-a26-IMAGE 5.jpg

همانطور که در تصویر فوق مشاهده می شود در بخش Width و Height عدد 96 وارد شده است. در همین تصویر گزینه Constrain Proportions با یک بیضی قرمز رنگ نشان داده شده است. در صورتیکه این گزینه تیک دار باشد، ابعداد طول و عرض تصویر ما به صورت متناسب با یکدیگر بزرگ و کوچک خواهند شد اما از آنجا که تصویر ما یک مربع است، هر عددی که برای Width یا همان عرض تصویر در نظر بگریم برای Height یا همان طول تصویر نیز در نظر گرفته خواهد شد. حال مقابل Width عدد 72 را وارد کرده و خواهیم دید که عدد مقابل Height به صورت خودکار از عدد 96 به 72 تغییر پیدا می کند. اکنون گزینه OK را کلیک می کنیم و خواهیم دید که تصویر ما به ابعاد 72 در 72 در خواهد آمد. حال مجدد همچون مراحل قبل این فایل را Save کرده اما این بار محل ذخیره سازی را داخل فولدر res درون فولدر drawable-hdpi در نظر می گیریم و به محض کلیک کردن گزینه Save با تصویر زیر مواجه خواهیم شد:


920610-a26-IMAGE 6.jpg

در واقع همانطور که در تصویر فوق مشاهده می شود داخل فولدر drawable-hdpi فایلی تحت عنوان ic_launcher.png وجود دارد که اکلیپس به طور خودکار درحین ساخت پروژه ایجاد کرده است و از آنجا که نام انتخابی ما برای آیکان جدید با نام آیکان پیش فرض یکی است، همانطور که در تصویر فوق با کادری قرمز رنگ نشان داده شده است این اخطار به ما داده می شود که "فایلی با همین نام در این فولدر وجود دارد. آیا می خواهید آن را با فایل جدید جایگزین کنید؟" که پاسخ ما به این سوال بلی بوده از این رو روی گزینه OK کلیک می کنیم.

به همین روش یکبار دیگر تصویر خود را به ابعاد 48 در 48 درآورده سپس آنرا در فولدر drawable-mdpi ذخیره می سازیم. در نهایت تصویر خود را به اندازه 36 در 36 در آورده و آن را جایگزین تصویری می کنیم که در فولدر drawable-ldpi قرار دارد.

حال این سوال ممکن است پیش آید که تنها فولدری که به صورت پیش فرض در آن آیکان ایجاد نشده بود فولدر drawable-xhdpi است و این در حالی است که مابقی فولدرها دارای آیکانی مرتبط با Density آن فولدر بودند و می بایست آیکان جدید را جایگزین آیکان های قبلی کرد. در پاسخ به این سوال بایستی گفت که اگر خاطرمان باشد در آموزش هشتم در حین ساخت اولین پروژه خود سه فولدر drawable-ldpi و drawable-mdpi و drawable-hdpi به صورت خودکار توسط اکلیپس برای ما ایجاد شدند و بالتبع داخل آنها هم آیکانی مرتبط با Density آنها ایجاد شد اما این در حالی است که فولدر drawable-xhdpi اصلا وجود خارجی نداشت و ما آن را در آموزش چهاردهم به منظور پشتیبانی از دستگاه هایی با صفحه نمایشی با Density بسیار بالا ایجاد کردیم. از همین رو است که هیچ آیکانی در آن قرار نداشت.

اکنون نیاز داریم تا اپلیکیشن خود را تست کنیم اما با موضوعی در اینجا مواجه می شویم که غفلت از آن نتایج متفاوتی را برای ما در بر خواهد داشت. اگر در حین طراحی آیکان جدید محیط برنامه نویسی اکلیپس باز بوده باشد و ما آیکان جدید را در سه فولدر drawable-ldpi و drawable-mdpi و drawable-hdpi جایگزین کرده باشیم، حتما نیاز است که اکلیپس را از این موضوع مطلع سازیم اما در صورتیکه نرم افزار اکلیپس بسته بوده باشد و پس از اتمام کار آن را اجرا کنیم دیگر نیازی به این کار نخواهد بود.

چنانچه مورد اول درباره ما صدق کند، همچون تصویر زیر عمل خواهیم کرد:


920610-a26-IMAGE 7.jpg

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


920610-a26-IMAGE 8.jpg

همانطور که در تصویر فوق با یک دایره قرمز رنگ نشان داده شده است، تصویر آیکان اولین پروژه ما از تصویر پیش فرض اندروید به تصویر آیکان جدید تغییر پیدا کرد.

دوشنبه 30 دی 1392  9:30 AM
تشکرات از این پست
amin_j
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

آموزش برنامه نویسی اندروید- قسمت ۲۷: اجزای تشکیل دهنده Activity یک اپلیکیشن


پس از آشنایی با نحوه ساخت آیکان در آموزش های بیست و چهار، بیست و پنج و بیست وششم، در این آموزش قصد داریم تا به طور جدی تر به مبحث برنامه نویسی اندروید بپردازیم.

برای این منظور پروژه ای که در آموزش هشتم ساختیم را در محیط برنامه نویسی اکلیپس باز نموده و از زیرشاخه پروژه ای که تحت عنوان My First Android Project ساخته بودیم، فولدر src را انتخاب نموده سپس از زیر مجموعه پکیج موجود فایل جاوای MainActivity را همانطور که در تصویر زیر با یک بیضی قرمز زنگ مشخص شده است را انتخاب می کنیم. با دو بار کلیک کردن روی نام این فایل خواهیم دید که در این فایل در محیط اکلیپس باز شده و کدهای داخل آن را در ادامه مطلب خواهیم دید:

920616-a27-IMAGE 1.jpg

اکنون کدی مشابه کد زیر خواهیم داشت:


  1. package com.behzadmoradi.mainpackage;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5.  
  6. public class MainActivity extends Activity {
  7. /** Called when the activity is first created. */
  8. @Override
  9. public void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.main);
  12. }
  13. }

اولین خط از کد فوق مربوط به نام پکیجی است که در حین ساخت پروژه تعریف می کنیم. در واقع وظیفه این پکیج جای دادن کلیه فایل های جاوا است که در حین ساخت یک اپلیکیشن ایجاد خواهیم کرد(برای آشنایی بیشتر با نحوه نامگذاری پکیج ها در اندروید، به آموزش چهارم مراجعه نمایید). پس از این خط دو خط کد دیگر وارد برنامه شده است که با کلید واژه import آغاز شده اند. به طور کلی این دو خط کد وظیفه دارند تا پکیج های مورد نیاز برای توسعه یک اپلیکیشن را به پروژه ما import یا "وارد" کنند که در ادامه به توضیح مفصل پیرامون هر یک از آنها خواهیم پرداخت. در حقیقت کلاس Activity به عنوان مهم ترین کلاس در ساخت یک اپلیکیشن اندرویدی است زیرا همانطور که قبلا توضیح داده شد در یک اپلیکیشن اندرویدی هر چیزی با یک Activity آغاز می شود و از همین رو است که کلاس اصلی که برای یک اپلیکیشن در حین ساخت یک پروژه تعریف می کنیم خصوصیاتی را از کلاس Activity به ارث می برد. به عبارت دیگر کد MainActivity extends Activity حاکی از آن است که کلاس MainActivity که در پروسه ساخت پروژه خود ایجاد کردیم برگرفته از کلاس Activity است، به عبارت دیگر از کلاس Activity که توسط برنامه نویسان سیستم عامل اندروید نوشته شده است ارث بری می کند. از آنجا که ما نیاز داریم تا بارها و بارها از کلاس Activity در اپلیکیشن خود استفاده کنیم، نیاز است تا این کلاس را از طریق کد import android.app.Activity; به پروژه خود وارد کنیم(لازم به ذکر است که می توانیم این کلاس را وارد برنامه نکرده و هر جا که خواستیم از این کلاس استفاده کنیم آدرس کامل آن را بنویسیم. به طور مثال در این پروژه می توانیم کدMainActivity extends android.app.Activity; را به اپلیکیشن خوداضافه کنیم اما این در حالی است که با اتخاذ این رویکرد می بایست کد بیشتری بنویسم که به نظر می رسد این کار منطقی نباشد(به منظور درک بهتر مبحث وارثت در زبان برنامه نویسی جاوا، به آموزش های سی دوم و سی سوم دوره آموزش برنامه نویسی جاوا در سایت نردبان مراجعه نمایید).

  1. @Override
  2. public void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.main);
  5. }

کلاس Activity در برگیرندۀ متدهای فراوانی است که یکی از آنها همین متد onCreate است که در کد فوق مشاهده می شود. به طور کلی می توان گفت زمانیکه یک Activity ساخته می شود، چندین متد فراخوانده می شوند که اولین آنها متد onCreate است که با استفاده از آن خواهیم توانست هر کاری که تمایل داشته باشیم را اجرا کنیم. به طور مثال در این پروژه پس از فرا خواندن این متد قادر خواهیم شد تا GUI یا "همان رابط گرافیکی کاربر" برنامه که در طریق XML ساخته می شود و در فولدر layout که زیرمجموعه فولدر res می باشد و نام آن main.xml است را اجرا نماییم. در زبان برنامه نویسی جاوا می توانیم متدهای مرتبط با کلاسی مثل کلاس Activity که کلاس دیگری مثل کلاس MainActivity از آن ارث بری شده است را بسته به نیاز خود Override یا "بازنویسی" کنیم تا کد مد نظر خود را در آن اجرا کنیم(برای کسب اطلاعات بیشتر در مورد مفهوم Override به سری آموزش های زبان برنامه نویسی جاوا در سایت نردبان قسمت سی و دوم مراجعه نمایید). زمانیکه متدی را Override می کنیم دو گزینه پیش روی ما است: 1. اول اینکه می توانیم کلیه خصوصیات اولیه متد مد نظر که توسط برنامه نویسان سیستم عامل اندروید ایجاد شده را بازنویسی کنیم و یا 2. می توانیم طوری به بازنویسی یک متد بپردازیم که علاوه بر خصوصیات اصلی اش، خصوصیات جدیدی را هم که برای آن در نظر می گیریم را در برگیرد که در این صورت می بایست از دستور super استفاده کنیم. به عبارت دیگر زمانیکه از کلید واژه super در کد خود استفاده می کنیم، این دستور را به ماشین مجازی جاوا یا همان Dalvik VM می دهیم تا علاوه بر کدهای موجود در کلاس مرتبط با متد onCreate ،کدهای مد نظر ما را نیز اجرا نماید. در حقیقت اگر کد super.onCreate(savedInstanceState); را از اپلیکیشن خود حذف کنیم این دستور را به ماشین مجازی می دهیم که فقط کد بازنویسی شده ما را اجرا کند و به هیچ وجه کدهای مرتبط با کلاس Activity که در برگیرندۀ متد onCreate است را مد نظر قرار ندهد. اما نکته اینجا است که به هر حال این خط از کد برای اجرای اپلیکیشن الزامی است چرا که برای اجرای یک اپلیکیشن به طور کامل و بدون نقص به کدهای نوشته شده توسط برنامه نویسان سیستم عامل اندروید برای متد onCreate نیاز داریم(برای آشنایی بیشتر با دستور super به سری آموزش های زبان برنامه نویسی جاوا در سایت نردبان قسمت چهل و دوم مراجعه نمایید). همانطور که در کد فوق ملاحظه می شود، داخل پرانتز مقابل متد onCreate مرتبط با کلاس Avtivity یک پارامتر قرار گرفته است. در کد فوق مشاهده می شود که داخل پرانتز مقابل متد onCreate پارامتر Bundle savedInstanceState قرار گرفته است. این پارامتر شیئی تحت عنوان savedInstanceState است که از روی کلاس Bundle ساخته شده است. وظیفه ای که این پارامتر بر عهده دارد این است تا این امکان را به توسعه دهنده بدهد تا بتواند Value ها یا "مقادیری" را در اپلیکیشن خود ذخیره سازد(لازم به ذکر است نام savedInstanceState اختیاری بوده و به صورت خودکار توسط خود اکلیپس ایجاد می شود). حال از آنجا که شیئی از روی کلاس Bundle ساخته و آن را در پروژه خود مورد استفاده قرار داده ایم پس نیاز است تا کد import android.os.Bundle; را به پروژه خود خود import کنیم که اینکار به صورت خودکار توسط محیط برنامه نویسی اکلیپس انجام خواهد شد. در نهایت به متد setContentView(); می رسیم که این وظیفه را دارا است تا هرآنچه داخل آن قرار گرفت را به نمایش در آورد. در حقیقت با قرار دادن کد R.layout.main داخل پرانتز مقابل این متد این دستور را به ماشین مجازی می دهیم تا فایلی تحت عنوان main.xml که داخل فولدر layout که زیرمجموعه فولدر res قرار دارد را به نمایش در آورد. منظور از R هم فایلی است که در زیرشاخه فولدر gen قرار دارد. چنانچه این فایل را باز کنیم کدی به شکل زیر مشاهده خواهیم کرد:

920616-a27-IMAGE 2.jpg

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

دوشنبه 30 دی 1392  9:31 AM
تشکرات از این پست
amin_j
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

آموزش برنامه نویسی اندروید - قسمت ۲۸: آشنایی با فایل XML در طراحی رابط کاربری اپلیکیشن

 

XML چیست؟

واژه XML مخفف واژگان Extensible Markup Language به معنی "زبان نشانه گذاری قابل گسترش" است. این زبان برخلاف HTML که به منظور نمایش داده ها مورد استفاده قرار می گیرد، برای ذخیره سازی و انتقال داده به کار گرفته می شود. شاید از دلایلی که از XML برای برنامه نویسی layout در توسعه اندروید استفاده شده است بتوان به گسترش پذیری آن، سهولت استفاده، خوانایی آن هم توسط انسان و هم توسط سیستم اشاره کرد. از سوی دیگر یک رابط گرافیکی کاربر یا همان GUI که توسط XML ایجاد شده باشد به سادگی قابل تحلیل و نمایش دادن است اما این در حالی است که اگر دیگر زبان ها در ساخت یک GUI استفاده می شد، تحلیل و Compile و اجرای آن به مراتب نسبت به یک فایل XML پیچیده تر می بود.


معرفی اجزای تشکیل دهنده layout اولین پروژه اندروید

به منظور درک کامل XML بهتر است layout پروژه ای که در آموزش هشتم تحت عنوان My First Android Project ساختم را مورد بررسی قرار دهیم. برای این منظور فایل main.xml که زیرشاخه layout در فولدر res قرار دارد را باز می کنیم:


920619-a28-IMAGE 1.jpg

همانطور که در تصویر فوق مشاهده می شود، پس از باز کردن فایل main.xml در پایین صفحه با دو گزینه متفاوت رو به رو خواهیم گشت: گزینه اول که با یک بیضی قرمز رنگ نشان داده شده است Graphical Layout به معنی "ساختار گرافیکی" است که نمود گرافیکی یک فایل xml را نشان می دهد. در حقیقت اگر این گزینه انتخاب شده باشد ساختاری مشابه با همان چیزی را خواهیم دید که در یک دستگاه واقعی نمایش داده خواهد شد. گزینه دوم main.xml است که با یک بیضی سبز رنگ نشان داده شده است. در واقع با کلیک کردن روی این گزینه به کدهای XML تشکیل دهنده layout دسترسی پیدا خواهیم کرد:


  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <TextView
  7. android:layout_width="fill_parent"
  8. android:layout_height="wrap_content"
  9. android:text="@string/hello" />
  10. </LinearLayout>

به محض کلیک کردن روی گزینه main.xml با کدی مشابه کد فوق رو به رو خواهیم شد. خط اول نشانگر شماره نسخه XML است که معادل با 1.0 می باشد و از سوی دیگر نوع رمزگذاری آن معادل با UTF-8 می باشد. UTF مخفف واژگان Unicode Transformation Format به معنی "فرمت تبدیل یونیکد" می باشد(لازم به ذکر است که یونیکد به منزله استانداردی است که از طریق آن کاراکترها و اعداد و علائم در اکثر زبان ها نشان داده می شود). عدد 8 حاکی از آن است که این استاندارد از 8 بیت حافظه برای ذخیره سازی یک کاراکتر استفاده می کند.

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="fill_parent"
  3. android:layout_height="fill_parent"
  4. android:orientation="vertical" >
  5. </LinearLayout>

کدی که در قسمت فوق ملاحظه می شود به منزلۀ کد اصلی است که مسئول ساخت layout می باشد. کلید واژه LinearLayout به ساختار layout ما اشاره دارد که ساختاری خطی است. به عبارت دیگر عناصری که روی این layout قرار می گیرند به صورت خطی یکی پس از دیگری یا از بالا به پایین و یا از چپ به راست در کنار یکدیگر قرار می گیرند. دستور xmlns:android=http://schemas.android.com/apk/res/android یک namespace به معنی "فضای نام" است که این وظیفه را بر عهده دارد تا از تداخل Tag هایی که دارای شناسه هایی یکسان می باشند جلوگیری به عمل آورد.

namespace چیست؟

برای روشن شدن این مطلب نیاز است تا مثالی دیگری ذکر کنیم. کد زیر حاوی اطلاعات یک جدول در HTML است:

  1. <table>
  2. <tr>
  3. <td>Apples</td>
  4. <td>Bananas</td>
  5. </tr>
  6. </table>

در این آموزش قصد نداریم تا Tag های زبان HTML را مورد بررسی قرار دهیم اما همین قدر لازم است بدانیم که تگ های

و

مسئول ساخت یک جدول در HTML می باشند. حال به کد زیر هم نگاهی می اندازیم:

  1. <table>
  2. <name>Room</name>
  3. <width>5</width>
  4. <length>8</length>
  5. </table>

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

  1. <a: table>
  2. < a: tr>
  3. < a: td>Apples</a: td>
  4. < a: td>Bananas</a: td>
  5. < /a: tr>
  6. < /a: table>
  7.  
  8. <b: table>
  9. < b: name>Room</b: name>
  10. < b: width>5</b: width>
  11. < b: length>8</b: length>
  12. < /b: table>

اکنون بدون هیچ مشکلی توانستیم دو جدول را با پیشوندهای مجزا با یکدیگر ادغام نموده و هر دو را در کنار یکدیگر بدون هیچ مشکلی قرار دهیم. اما نکته ای که در اینجا حائز اهمیت است این است که هر موقع که در کدهای XML خود از یک پیشوند استفاده می کنیم نیاز است تا یک namespace یا همان "فضای نام" را برای پیشوند خود تعریف کنیم. به طور کلی namespace با قرار دادن دستور xmlns در اولین Tag ایجاد می گردد. ساختار کلی namespace به صورت xmlns:prefix="URI" است به این صورت که پس از دستور xmlns یک علامت : قرار داده سپس پیشوندی که قصد داریم از طریق آن Tag را از یکدیگر مجزا سازیم را نوشته که در مثال های فوق ما از پیشوندهای a و b استفاده کردیم سپس یک علامت مساوی قرار داده و مقابل آن آدرس یک URL را داخل علامت های “ “ قرار می دهیم. در حقیقت اگر بخواهیم کدهای ادغام شده فوق را با نوشتن namespace تکمیل کنیم می بایست کدهای ما به شکل زیر باشند:

  1. <a: table xmlns:a="http://www.w3.org/TR/html4/">
  2. < a: tr>
  3. < a: td>Apples</a: td>
  4. < a: td>Bananas</a: td>
  5. < /a: tr>
  6. < /a: table>
  7.  
  8. <b: table xmlns:b="http://www.w3schools.com/furniture"
  9. < b: name>Room</b: name>
  10. < b: width>5</b: width>
  11. < b: length>8</b: length>
  12. < /b: table>
  13.  

حال با قرار دادن دو namespace یکی برای پیشوند a و دیگری برای پیشوند b یک نوع یکنواختی را در کد خود ایجاد کرده زیرا زمانیکه یک namespace برای یک عنصر اصلی که در اینجا

است ایجاد می کنیم، کلیه عناصر زیرشاخه آن نیز از همان namespace تبعیت خواهند کرد.استاندارد نامگذاری Namespace به این شکل است که نامی به شکل آدرس یک URL برای آن در نظر گرفته می شود و علت آن هم ایجاد نامی منحصر به فرد است و در صورتیکه مثلا آدرس http://www.w3schools.com/furniture را در یک مرورگر وب تایپ کنیم به طور حتم با پیغام 404 – The page cannot be found به معنی "این صفحه قابل یافتن نیست" مواجه خواهیم شد زیرا این آدرس حاوی هیچ گونه اطلاعاتی نمی باشد. لازم به ذکر است که این نام همواره می بایست به همین شکلی که ملاحظه می کنیم باشد و در صورتیکه آن را تغییر دهیم اپلیکیشن ما با مشکل مواجه خواهد شد. اکنون که با مفهوم namespace آشنا شدیم مجدد به کد خود نگاهی خواهیم انداخت:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="fill_parent"
  3. android:layout_height="fill_parent"
  4. android:orientation="vertical" >
  5. </LinearLayout>

در کد فوق برای Tag مرتبط با یک namespace ایجاد شده است به این صورت که پس از دستور xmlns یک علامت : قرار گرفته و در آن پیشوند android تعریف شده سپس یک علامت مساوی قرار گرفته و مقابل آن داخل علامت های “ “ آدرس URL یی که در کد فوق ملاحظه می شود گنجانده شده است. در حقیقت این آدرس به "ناکجا آباد" خواهد رفت و به عبارت دیگر وجود خارجی ندارد علیرغم اینکه این آدرس وجود ندارد اما این در حالی است که این آدرس برای توسعه فایل های XML اندروید به عنوان یک استاندارد در آمده و نمی بایست آن را تغییر داد. در این مثال از پیشوند android در Tag اصلی استفاده شده است و همانطور که می بینیم در Tag های زیرشاخه Tag اصلی اول نام این پیشوند آمده سپس یک علامت : قرار گرفته و سپس نام Tag نوشته شده است.

دوشنبه 30 دی 1392  9:32 AM
تشکرات از این پست
amin_j
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

آموزش برنامه نویسی اندروید - قسمت ۲۹: بررسی TextView


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

برای همین منظور مجدد به پروژه ای که در آموزش هشتم تحت عنوان My First Android Project ایجاد کردیم رجوع می کنیم. پس از باز کردی فایل main.xml که در فولدر layout زیرشاخه res قرار دارد با کد زیر مواجه خواهیم شد:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <TextView
  7. android:layout_width="fill_parent"
  8. android:layout_height="wrap_content"
  9. android:text="@string/hello" >
  10. </LinearLayout>

در آموزش گذشته ساختار کلی کد فوق مورد بررسی قرار گرفت. در این آموزش قصد داریم تا تگ مرتبط با را مورد بررسی قرار دهیم. اگر خاطرمان باشد پس از ساخت این پروژه و اجرای آن روی Emulator یا یک دستگاه واقعی عبارت Hello World, MainActivity! روی صفحه دستگاه به نمایش در آمد. در حقیقت چیزی که این عبارت را در خود ذخیره ساخته است همین Tag است که در کد فوق مشاهده می شود. همانطور که می بینیم در تگ layout_width مقدار fill_parent در نظر گرفته شده است که در آموزش پیشین با آن آشنا شدیم. در تگ layout_height می بینیم که مقدار wrap_content در نظر گرفته شده است. معادل های فارسی واژه انگلیسی wrap را می توان "پیچیدن، پوشاندن، بسته بندی کردی، کادو کردن و ..." در نظر گرفت. معادل فارسی واژه انگلیسی content هم "محتوا" یا به عبارتی محتویات داخل چیزی است. به طور کلی می توان گفت که هر زمانیکه ما از مقدار wrap_content استفاده کنیم این دستور را به سیستم می دهیم که چیزی که عرض یا ارتفاع آن دارای این مقدار می باشد بایستی فقط آنقدر یا از عرض و یا از ارتفاع امتداد یابد که محتویات داخلش را نشان دهد. به عبارت دیگر فرض کنیم که متنی داریم که ارتفاع فونت آن معادل با 12 پیکسل است. حال اگر layout_height این متن را معادل با wrap_content قرار دهیم، ارتفاع این متن فقط به اندازه ای خواهد بود که ارتفاع فونت قرار گرفته در این متن را پوشش دهد نه کمتر و نه بیشتر(نکته ای که در مورد مقادیر fill_parent و wrap_content می بایست همواره مد نظر قرار دهیم این است که این دو مقدار هم می توانند برای تگ layout_width و هم برای تگ layout_height مورد استفاده قرار گیرند). به طور کلی می توان گفت که هر چیزی که روی یک UI قرار می گیرد به منزله یک view است یعنی چیزی که نمایی دارد مثل یک متن، یک دکمه و غیره. می توان گفت که علاوه بر مقادیر fill_parent و wrap_content می توان از مقادیر عددی هم استفاده کرد. در صورتیکه بخواهیم از مقادیر عددی استفاده کنیم همواره این نکته را می بایست به خاطر داشته باشیم که از چه واحدی استفاده کنیم(برای آشنایی بیشتر با واحدهای اندازه گیری در سیستم عامل اندروید به آموزش شانزدهم مراجعه نمایید). به طور خلاصه واحدی که این تضمین را به ما خواهد داد تا کمترین تفاوت را در صفحه نمایش هایی با Density مختلف داشته باشیم واحد dip است(این واحد به صورت dp هم نوشته می شود. به خاطر داشته باشیم که dip را با dpi اشتباه نگیریم). برای روشن شدن این مطلب روی Tab مرتبط با Graphical Layout کلیک کرده و تصویری همچون تصویر زیر مشاهده خواهیم کرد:

920625-a29-IMAGE1.jpg

همانطور که در تصویر فوق ملاحظه می شود با یک بار کلیک کردن روی TextView یک حاشیه آبی رنگ دور آن قرار می گیرد که نشانگر این مسئله است که این متن انتخاب شده است. ناحیه سیاه رنگی که در تصویر مشخص است نشانگر کل صفحه نمایش است. اگر خاطرمان باشد تگ layout_width را با مقدار fill_parent تعریف کردیم. در حقیقت این صفحه سیاه رنگ به منزله parent یا همان چیزی است که متن را در خود جای داده است. حال از آنجا که مقدار Layout_width معادل با fill_parent است این دستور را می دهیم تا عرض این متن ساختار parent یا همان ساختاری در برگیرنده اش را "پر" سازد(فعل fill در زبان فارسی به معنی "پر کردن" است). از این رو می بینیم که خط آبی کل عرض صفحه سیاه رنگ را پوشش داده است. اکنون اگر ارتفاع این حاشیه آبی رنگ را مد نظر قرار دهیم، خواهیم دید که فقط به اندازه ای امتداد پیدا کرده است که ارتفاع فونت موجود در آن را پوشش دهد نه بیشتر و نه کمتر. حال فرض کنیم که می خواهیم ابعاد این TextView را به طور دستی وارد کنیم. برای این منظور مجدد به Tab مربوط به main.xml رفته و آن را به صورت زیر ویرایش می کنیم:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <TextView
  7. android:layout_width="200dip"
  8. android:layout_height="48dip"
  9. android:text="@string/hello" >
  10. <LinearLayout>

همانطور که در کد فوق ملاحظه می شود مقادیر layout_width و layout_height به ترتیب به 200dip و 48dip تغییر پیدا کرده اند. اکنون مجدد به Tab مربوط به Graphical Layout بازگشته و انتظار می رود که حالتی همچون تصویر زیر را ببینیم:

920625-a29-IMAGE2.jpg

همانطور که در تصویر فوق در قالب یک کادر قرمز رنگ نشان داده شده است ابعاد عرض و ارتفاع این متن به ترتیب به 200dip و 48dip تغییر یافته اند که این موضوع را می توان از روی تغییر اندازه کادر آبی رنگ به وضوح درک کرد. یک راه تغییر ابعدا یک view همین روشی است که در بالا انجام دادیم یعنی ویرایش کردن مستقیم کد اما این در حالی است که اینکار را می توان از طریق پنجره Properties هم انجام داد(چنانچه این پنجره باز نباشد طبق آموزش بیستم می توان آن را باز نمود):

920625-a29-IMAGE3.jpg

همانطور که در تصویر فوق ملاحظه می شود پس از باز کردن پنجره Properties در محیط اکلیپس که در تصویر فوق با یک فلش قرمز رنگ مشخص شده است Tab های مختلفی خواهیم دید که یکی از آنها که در تصویر فوق با یک بیضی قرمز رنگ مشخص شده است Misc است که مخفف واژه Miscellaneous به معنی "متفرقه و گوناگون" می باشد. همانطور که در تصویر فوق ملاحظه می شود مقابل Layout height دقیقا همان مقداری را می بینیم که به طور دستی وارد کردیم و مقابل Layout width هم مقدار 200dip را می بینیم که قبلا وارد کرده بودیم. حال در تصویر فوق با کلیک کردن روی جاهایی که با دو خط قرمز رنگ مشخص شده اند امکان ویرایش آن مقادیر برای ما بوجود خواهد آمد. به طور مثال مقدار Layout height را به fill_parent و مقدار Layout_width را هم به fill_parent تغییر می دهیم:

920625-a29-IMAGE4.jpg

همانطور که در تصویر فوق مشاهده می شود، پس کلیک کردن به طور مثال روی عدد 200dip خواهیم دید که یک فلش نمایان می شود(در تصویر فوق با یک دایره قرمز رنگ مشخص شده است). پس از کلیک کردن روی آن فلش خواهیم دید که پنجره کوچکی باز خواهد شد که از داخل آن می توانیم مقادیر از پیش تعریف شده fill_parent و wrap_content را انتخاب کنیم. اکنون پس از اینکار خواهیم دید که کادر آبی رنگ به صورت زیر به کلی تغییر اندازه خواهد داد:

920625-a29-IMAGE5.jpg

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

دوشنبه 30 دی 1392  9:34 AM
تشکرات از این پست
دسترسی سریع به انجمن ها