10 ابزار پرکاربرد مخفی در ویندوز

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

10 ابزار پرکاربرد مخفی در ویندوز

بسیاری از این ابزار به راحتی و اگر تنها نام آنها را بدانید در دسترسی شما قرار دارند و کافیست با باز کردن منوی استارت و تایپ کردن نما آنها به خود ویندوز فرمان در اختیار قرار دادن آنها را بدهید. در ویندوز ۸ شما به منوی تنظیمات در کادر جستجو دسترسی پیدا خواهید کرد.

ابزار Windows Memory Diagnostic

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

10 ابزار پرکاربرد مخفی در ویندوز

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

ابزار Resource Monitor

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

10 ابزار پرکاربرد مخفی در ویندوز

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

برای دسترسی به این ابزار کافیست TaskManager را اجرا کرده و به زبانه Performance بروید و بر روی گزینه Resource Monitor کلیک کنید. این ابزار را می توانید به طور مستقیم و با جستجوی نام آن در کادر جستجو در منوی استارت پیدا کرده و استفاده کنید.

ابزار Performance Monitor

این ابزار به شما این امکان را می دهد که اطلاعات کارآیی سیستم خود را جمع آوری و مشاهده کنید.

10 ابزار پرکاربرد مخفی در ویندوز

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

ابزار Computer Management and Administrative Tools

ابزار بررسی کارآیی سیستم در واقع تنها یکی از ابزارهای مدیریت کنسول مایکروسافت (MMC) است و بسیاری از این ابزارهای سیستمی را می توانید در بخش ابزارهای مدیریتی ویندوز پیدا کنید اما در عین حال این ابزارها را می توانید با باز کردن پنجره ابزارهای مدیریتی رایانه (Computer Management application) در یک پنجره باز کنید.

10 ابزار پرکاربرد مخفی در ویندوز

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

- Task Scheduler

این ابزار به شما اجازه می دهد که کارها و اقدامات برنامه ریزی شده بر روی سیستم را مشاهد و آنها را تغییر دهید و در عین حال وظائف و اقدامات مورد نظر خود را به این برنامه اقدامات اضافه کنید.

- Event Viewer

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

- Shared Folders

در این قسمت می توانید فولدرهای به اشتراک گذاشته در شبکه در رایانه خود را ببینید. ابزاری که بسیار سریع نمایی از فولدرهای به اشتراک گذاشته را بدون هیچ جستجو و کار اضافی در اختیار شما قرار می دهد.

- Device Manager

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

- Disk Management

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

- Services

در این بخش می توانید سرویس هایی را که در حال حاضر و در پشت پرده سیستم عامل در حال اجرا هستند را ببینید و آنها را کنترل کنید.

10 ابزار پرکاربرد مخفی در ویندوز

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

- Advanced User Accounts Tool

سیستم عامل ویندوز همچنین یک ابزار پنهان کاربری دارد که برخی گزینه ها را که در رابط کاربری عادی و استاندارد ویندوز قرار ندارند را در اختیار شما قرار می دهد. برای باز کردن و دسترسی به این ابزار کافیست کلیدهای ترکیبی WinKey+R را فشار دهید. WinKey در واقع همان کلیدی است که علامت ویندوز بر ریو ان دیده می شود و به تنهایی و با زدن آن منوی استارت برای شما باز می شود. با زدن این دو دکمه به صورت ترکیبی، کادر Run در برابر شما ظاهر می شودحالا کافیست در این کادر تایپ کنید: netplwiz و یا control userpasswords2و بعد Enter  را بزنید تا پنجره این ابزار در برابر شما ظاهر شود.

10 ابزار پرکاربرد مخفی در ویندوز

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

- Disk Cleanup

این ابزار نیز مخصوصا برای کاربرانی که از سیستم های کُندتر بهره می برند ابزاری آشناست یا کاربرانی که از کمبود فضای هارد بر روی سیستم خود رنج می برند اما خب هنوز بسیاری از کاربران هستند که از قابلیت این ابزار بی خبر هستند.

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

10 ابزار پرکاربرد مخفی در ویندوز

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

- Group Policy Editor

همین ابتدای توضیح این ابزار بد نیست بگوئیم که این ابزار تنها در نسخه حرفه ای و یا نامحدود ویندوز در دسترس قرار دارد و در ویندوز های نسخه خانگی و استاندارد نمی توانید به آنها دسترسی داشته باشید.

10 ابزار پرکاربرد مخفی در ویندوز

با این ابزار می توانید به تنظیمات گسترده ای دسترسی داشته باشید که برای استفاده مدیران سیستم ها در جهت مدیریت رایانه ها در شبکه های تحت مدیریت خود، طراحی شده اند. البته برخی تنظیمات این ابزار نیز می تواند توسط کاربران عادی مورد استفاده قرار گیرد. به طور مثال در ویندوز ۸ می توانید با استفاده از این ابزار، منوی قفل صفحه نمایش را غیرفعال کرده و مستقیما به صفحه لاگین برسید. برای رسیدن به این ابزار کافیست در منوی استارت عبارت gpedit.msc را وارد کنید.

- Registry Editor

شرمنده! اگرچه بسیاری از شما با ویرایش رجیستری سر و کار داشته اید اما خب همچنان یک ابزار پنهان به حساب می آید و هنوز مایکروسافت لینک دسترسی به آن را در منوی استارت نگنجانده است. برای دسترسی به این ابزار همانطور که می دانید باید عبارت regedit را در منوی استارت وارد کرده و Enter را بزنید.

10 ابزار پرکاربرد مخفی در ویندوز

بسیاری از قابلیت های موجود در ابزار Group Policy Editor به صورت معادل در ابزار ویرایش رجیستری نیز وجود دارند. به طور مثال در ویندوز ۸ کاربران نسخه های استاندارد نمی توانند با استفاده از Group Policy Editor صفحه قفل را غیرفعال کنند اما آنها می توانند با همین ابزار ویرایش رجیستری آن را غیرفعال کنند.

- MSConfig

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

10 ابزار پرکاربرد مخفی در ویندوز

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

-System Information

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

10 ابزار پرکاربرد مخفی در ویندوز

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

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

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


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

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

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

دستور کار
برای ایجاد وظیفه مذکور باید Task Scheduler را از طریق یکی از مراحل 1 ، 2 و 3 پیدا کرده و اجرا کنید :

1. در منوی Start از مسیر زیر پیروی کنید :
Start>All Programs>Accessories>System Tools>Task Scheduler

یا
2. در کادر جستجوی منوی Start عبارت Task Scheduler را تایپ کرده و Enter کنید.

یا
3. در پنجره Control Panel مسیر زیر را دنبال کنید:
Control panel>System and Security>Administrative Tools>Task Scheduler

4. سپس از قاب سمت راست آن روی لینک Create Task کلیک کنید.

5. حالا باید برای این وظیفه یک نام تعیین کنید و از تیک داشتن گزینه Run with highest privileges اطمینان حاصل کنید چرا که انجام shutdown یه سطح مجوز Administrator نیاز دارد.

6. حال به زبانه Triggers بروید . روی New کلیک کنید و سپس زمانبندیتان که برای خاموش شدن خودکار، مد نظرتان است را تعیین کنید. مثلا هرشب ساعت 12:00

7. حالا به زبانه Actions بروید. روی New کلیک کنید و سپس در کادر Program/script عبارت shutdown و در کادر add arguments نشانوند S/ را وارد کنید. اگر میخواهید رایانه را وادار به خاموش شدن و بستن آنی(Kill) برنامه ها کنید، میتوانید از این دو نشانوند S/F/ با هم استفاده کنید.

8. سپس به زبانه Conditions بروید، و گزینه Start the task only if the computer is idle for را تیک بزنید تا این وظیفه فقط در صورتی انجام شود که رایانه برای مدتی بیش از X دقیقه بیکار مانده باشد.این مدت زمان در مقابل همین گزینه قابل تنظیم است. در زیر همین گزینه میتوانید تعیین کنید که اگر در زمان مقرر رایانه مشغول بود، برای انجام دادن این وظیفه تا چه مدت منتظر بیکار شدن سیستم بماند. میتوانید با تیک زدن گزینه Stop if the computer ceases to be idle انتخاب کنید که در صورتی که رایانه از بیکار بودن خارج شد انجام این وظیفه متوقف شود. در صورتی که گزینه Restart if the idle state resumes را تیک بزنید، اگر رایانه دوباره وارد وضعیت بیکار شود، انجام این وظیفه مجددا آغاز میشود.

9.در پایان به زبانه Setting بروید. در آنجا میتوانید تعیین کنید که اگر وظیفه با شکست مواجه شد هر چند دقیقه یکبار مجددا تلاش کند. به این ترتیب اگر پیش از زمان معمول پای رایانه‌تان بودید این وظیفه مدتی بعد فعال شده  و رایانه را خاموش میکند.

10. روی دکمه OK کلیک کنید و تمام! رایانه تان در زمان مقرر به طور خودکار خاموش خواهد شد.

محدودیت‌های سرعتی ایجاد شده توسط ISP خود را کشف کنید



چگونه باید متوجه شویم که ISP ما آیا در راه سرعت دانلود
و آپلود ما محدودیت ایجاد کرده است و آیا اینکه یکسری از ترافیک های خاص را ممنوع
کرده و درگیر آنچه به اصطلاح "شکل دهی به ترافیک" نامیده میشود –
Traffic Shaping – شده است یا خیر؟ این موضوعی
است که بسیاری از کاربران در خصوص آن دغدغه دارند و به هر حال دانستن آن خالی از
لطف هم نیست.


به گزارش «تابناک» این روزها کاربران ایرانی در بسیاری از موارد از
سرعت پایین اینترنت ناراضی بوده و شکایت میکنند، موضوعی که باعث میشود برخی از
کاربران اینترنت مجبور به تغییر دادن خدمات رسان اینترنت خود یا همان
ISP خود شوند.



شاید برای بسیاری از کاربران جالب باشد که بدانند که آیا ISP آنها محدودیت هایی بر سر راه دانلود و آپلود
آنها ایجاد میکند، و اگر اینگونه است این محدودیت ها در چه نقطه و مسیری از
اینترنت است؟



پاسخ این سوال را میتوانید از طریق ابزار تحت وب Glasnost که یک پروژه طراحی شده از سوی موسسه سیستم
های نرم افزاری
Max Planck هست، پیدا کنید. ابزاری
که برای نشان دادن محدودیت های ایجاد شده توسط
ISP و گزارش
آنها در مدت زمانی تقریبا کوتاه طراحی شده است.



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

محدودیت‌های اینترنتی ایجاد شده توسط ISP خود را کشف کنید


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

محدودیت‌های اینترنتی ایجاد شده توسط ISP خود را کشف کنید


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

محدودیت‌های اینترنتی ایجاد شده توسط ISP خود را کشف کنید


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

محدودیت‌های سرعتی ایجاد شده توسط ISP خود را کشف کنید


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



این ابزار به خوبیبه کاربران کمک میکند که در مقایسه خدمات رسانی ISP ها بهترین گزینه را برای اتصال به دنیای وب
برای خود انتخاب کنند.

http://broadband.mpi-sws.org/transparency/bttest.php

منبعhttp://www.irexpert.ir/Webforms/News/News.aspx?EvID=160694

در گوگل به صورت حرفه ای جستجو کنید


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

در گوگل به صورت حرفه ای جستجو کنید

در گوگل به صورت حرفه ای جستجو کنید

می توانید بدون باز کردن یچ سایت جانبی، خیلی از اطلاعات آب و هوا، فرموال های ریاضی و … را از گوگل بپرسید. مثلا برای پیدا کردن ساعت در کابل بزنید: time Kabul، پیش بینی آب و هوای کابل: weather Kabul، طلوع آفتاب در کابل: sunrise Kabul؛ یا برای به دست آوردن نتیجه یک محاسبه ریاضی، کافی است رابطه اش را در گوگل بنویسید و Enter را بزنید.

۲- کلماتی را که نمی خواهید، از جستجو حذف کنید

اگر دنبال موضوعی درباره وب دیزاین هستید، ولی نتیجه هایی را که در مورد تبلیغات است نمی خواهید، کافی است از کاراکتر خط تیره «-» استفاده کنید: web design – advertising.

3- فقط محتویات یک سایت خاص را جستجو کنید

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

web design site yoursitedomain.com

4- از کلمات مشابه و هم خانواده استفاده کنید

اگر از معنای دقیق کلمه ای خبر ندارید، می توانید از کلمات مشابه آن یا هم معنی هایش استفاده کنید تا جستجوی دقیق تری داشته باشید. برای این کار فقط در آخر سرچ، از علامت «~» بین کلمات مشابه یا هم معنی استفاده کنید:

web Design ~ web development

5- فرمت فایل خود را مشخص کنید

اگر دنبال نتایجی هستید که به صورت PDF یا Word یا فرمتی خاص باشد، می توانید کلمه کلیدی، “Filetype”، و بعد فرمت مورئد نظر خود را جلوی موضوع بنویسید:

web design filetype.pdf

6- از Range استفاده کنید

فرضا می خواهید مطلبی را بین سال های ۱۹۴۰ تا ۱۹۵۰ جستجو کنید. کافی است به این صورت سرچ کنید:

president 1940-1950

7- واضح بنویسید

اگر می خواهید گوگل دقیقا عین عبارتی که در باکس جستجو نوشته اید را پیدا کند (برای مثال «طراحی وب سایت»)، آن را داخل علامت نقل قول قرار دهید: “web design”.

۸- معنای کلمات را بدانید

برای فهمیدم تعنا، ریشه و حتی تلفظ واژه ها می توانید به گوگل پناه ببرید. کافی است به این صورت تایپ کنید:

define.apple

9- از ستاره استفاده کنید

فرض کنید ایده ای برای جستجو دارید اما دقیقا نمی دانید از چه کلیدواژه هایی باید استفاده کرد. برای این موارد می توانید از ستاره استفاده کنید. آن وقت جای ستاره، ترکیباتی از چند کلیدواژه اولیه ای که دارید قرارت می گیرد. برای مثال cartoon * tutorials در در گوگل سرچ کنید. نتایجی که به دست می آید، چیزهایی مثل Cartoon Character IllustrationTutorials یا Cartoon Coloring Tutorial خواهد بود یعنی به جای ستاره، از ترکیبا مناسبی برای بهتر شدن نتیجه استفاده می کند.

۱۰- از صفحه Advanced Search استفاده کنید

اگر می خواهید مطلع شوید مردم ملبورن بعد از گل خداداد عزیزی به مارک بوسنیچ در آن بازی طلایی، چند بار اسم او را سرچ کرده اند، برای این کار می توانید به Advanced Search گوگل بروید و با انتخاب تنظیماتی، به راحتی این اطلاعات را به دست بیاورید، بدون اینکه نیازی به دانستن ترفندهای جستجو داشته باشید. غول گوگل، مرکب فرمانبر شماست!

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


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

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

داراگون مدت زمان طولانی تنها نرم افزار موجود برای این کار بود ولی اکنون این گونه نیست. بهتر است سایر نرم افزارها و امکانات را بررسی کنیم.

Windows Speech Recognition:

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

این برنامه رایگان من را بسیار تحت تأثیر قرار داد و شما اکنون می توانید این نرم افزار را بر روی ویندوز ویستا، ویندوز ۷ و ویندوز ۸ استفاده کنید.

کنترل کامپیوتر خود با استفاده از ۵ دستور تشخیص صدا

برای فعال سازی برنامه Windows Speech Recognition، به قسمت منوی Start بروید و در قسمت جستجو کلمه speech recognition را تایپ کنید.

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

شما همین طور می توانید به همه ویژگی های Control Panel دسترسی داشته باشید.

هنگامی که تمامی تنظیمات را انجام دادید شما قادر هستید با این برنامه کار کنید.

برای شروع فقط در میکروفون بگویید که “start listening” سپس از برنامه صدایی همانند بوق می شنوید و برنامه منتظر دستور بعدی شما می ماند.

شما می توانید با استفاده از Windows Speech Recognition تقریبا هر کاری در کامپیوتر شخصی خود انجام دهید برای مثال:می تواند در مرورگرها زبانه جدیدی باز کند و از همه مهم تر برنامه های کاربردی ماکروسافت آفیس را باز کند و با آن ها کار کند. هنگامی که برنامه ماکروسافت ورد را باز کرد شما می توانید متن خود را بخوانید و ببینید که در برنامه نوشته می شود.

شما می توانید به کامپیوتر خود بگوید که خاموش شود و یا حتی دوباره بازگذاری شود. هنگامی که کار شما با این برنامه تمام شد، فقط بگویید”stop listening” و کار شما پایان می یابد و برنامه متوقف می شود تا زمانی که شما دوباره آن را صدا کنید.

استفاده از این برنامه آسان و رایگان است.

Google Voice Search:

کاربران مرورگر کروم حتما متوجه میکروفون کوچک در سمت راست نوار جستجوی گوگل شده اند. این میکروفون همان برنامه Google Voice Search است.

کنترل کامپیوتر خود با استفاده از ۵ دستور تشخیص صدا

خدمات گوگل درباره تشخیص صدا تا امروز عبارت اند از: موتور جستجو و خدمات ترجمه.

Google Voice Search فقط در مرورگر کروم که بر روی سیستم عامل های مختلف قابل دسترس است، استفاده می شود.

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

با فرض این که میکروفون شما به کامپیوتر شخصی شما وصل است (یا هدست) از شما گوگل می پرسد که آیا شما اجازه دسترسی به میکروفون را می دهید یا خیر؟

در صورت تائید از شما می خواهد که صحبت کنید و در مورد موضوعی که می خواهید جستجو را شروع کنید.

نتایج به سرعت بر روی صفحه نمایش شما نشان داده می شود بدون آن که نیاز باشد شما تایپ کنید.

کنترل کامپیوتر خود با استفاده از ۵ دستور تشخیص صدا

الگوریتم برنامه Google voice recognition نسبتاً خوب است و می تواند متوجه سخنان شما شود.

من توانستم با سایر لهجه ها مثل:آلمانی، اسکاتلندی هم به نتایج خوبی دست پیدا کنم.

Dragon NaturallySpeaking Premium:

Dragon یکی از بهترین و قدیمی ترین نرم افزارهای تشخیص صدا است ولی نسخه اصلی و خانگی Dragon NaturallySpeaking قیمتی حدود ۷۵ دلار دارد و با حق بیمه قیمت آن به ۱۵۰ دلار افزایش می یابد.

کنترل کامپیوتر خود با استفاده از ۵ دستور تشخیص صدا

هنگامی که شما برای اولین بار برنامه Dragon NaturallySpeaking را باز می کنید، باید یک صفحه مربوط به مشخصات کاربر را پر کنید.

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

یکی از ویژگی های فوق العاده این برنامه، هماهنگی آن با برنامه Gmail است.

این برنامه به شما کمک می کند تا ایمیل های خود را بنویسید و به مخاطبان خود ارسال کنید.

همین طور می توانید به اشاره گر موس بگوید که در کجا قرار بگیرد.

دقت در دیکته و درست نوشتن متن در این نرم افزار شاهکار است.

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

شما همین طور می توانید تعیین کنید که کدام بخش از متن زیر خط دار و یا سایه دار و تیره باشد. در هنگامی که متن خود را خواندید می توانید آن را چاپ کنید.

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

TalkTyper:

TalkTyper یک برنامه تشخیص صدای آنلاین است که به شما گزینه های اساسی در مورد این که با متن خود چه کنید می دهد.

برای کسانی که خواسته های زیادی از یک برنامه تشخیص صدا ندارند می تواند گزینه عالی باشد.

کنترل کامپیوتر خود با استفاده از ۵ دستور تشخیص صدا

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

از سایر گزینه ها می توان به کپی کردن در کلیپ بورد و ایمیل کردن متن و چاپ و ترجمه آن به زبان دیگری اشاره کرد.

اگر شما می خواهید متن خود را به زبان دیگری ترجمه کنید بر روی translating language کلیک کنید و زبان مورد نظر خود را انتخاب کنید.

TalkTyper به صورت اتوماتیک یک زبانه جدید در مرورگر کروم شما باز می کند که متن شما در آن قرار دارد.

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

شاید فقط در مورد محتوای یک ایمیل بهتر است استفاده شود.

باز هم می گویم گزینه بهتر استفاده از Dragon است.

Tazti:

که “tasty” هم تلفظ می شود یکی دیگر از برنامه های تشخیص صدا است.

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

کنترل کامپیوتر خود با استفاده از ۵ دستور تشخیص صدا

شما می توانید با استفاده از این نرم افزار یک پوشه را باز کنید و یا می توانید حذف کنید.

شما می توانید همین طور از دستورات «کلیک کنید» و «دو بار کلیک کنید» هم بدون استفاده از ماوس استفاده کنید.

شما می توانید از این برنامه به مدت ۱۵ روز رایگان استفاده کنید و پس از آن ۱۵ دلار هزینه بپردازید.

- هیچ کدام برنامه ها به پای Dragon نمی رسند.

پس از تست هر ۵ برنامه واضح است که Dragon NaturallySpeaking برنده این مقایسه ها شده است.

با وجود برنامه ویندوز رایگان و حتی کار آیی راحت در گوگل کروم بسیاری از کاربران حاضر هستند تا ۱۵۰ دلار بپردازند و از یک برنامه کامل بهره مند شوند.

استفاده نکردن از صفحه کلید کار کاربران را بسیار آسان تر کرده است.

نا امن‌ترین سیستم‌عامل تلفن همراه کدام است؟


این گزارش مربوط به ماه های ژوئیه تا سپتامبر 2013 است که در آن اعلام شده است که 259 خانواد جدید از تهدیدهای تلفن همراهی شناسایی شد.

نا امن ترین سیستم عامل تلفن همراه کدام است؟

در حال حاضر، 97 درصد تهدید امنیتی یعنی تعداد 252 نرم افزار مخرب، مخصوص سیستم عامل تلفن همراه، اندروید است که محبوب  ترین سیستم عامل در میان سایر سیستم عامل ها است.

از این تهدیدهای امنیتی 252 مورد مربوط به سیستم عامل اندروید و 7 مورد مربوط به سیستم عامل نوکیا سیمبین (Symbian) است. این در حالی است که هیچ تهدید برای IOS، بلکبری یا ویندوز تلفن گزارش نشده است.این آمار نسبت به 205 خانواده "تهدیدهای تلفن همراهی" که در اوایل سال جاری شناسایی شده بود، افزایش داشته است.

نا امن ترین سیستم عامل تلفن همراه کدام است؟

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

شرکت F-Secure در سال 1988 تاسیس شده است. این شرکت نرم افزارهای امنیتی را به عنوان یک سرویس از طریق اپراتورهای مختلف برای تهدیدات آنلاین و... ارائه می دهد .

سین سولیوان (Sean Sullivan) از مشاوران امنیتی مرکز F-Secure در این خصوص گفت؛ به طور کلی باید توجه داشت که در خدمات برخی شرکت ها از جمله گوگل تدابیری اندیشیده  شده است که می تواند ایمنی کاربر را فراهم کند. به عنوان مثال، اگر شما حساب کاربری Gmail خود را در این سیستم پاک کنید، تمام اطلاعات شما نیز پاک می شود.

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

نا امن ترین سیستم عامل تلفن همراه کدام است؟

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

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

آموزش برنامه نویسی اندروید - قسمت ۴۱: ساخت اپلیکیشن ذکر شمار (بخش دوم) نحوه وارد کردن متون فارسی به

اهداف آموزشی این قسمت عبارتند از:
1. نحوه نوشتن یک متن فارسی در اپلیکیشن
2. نحوه تنظیم Emulator به منظور نمایش دادن متون فارسی

پس از ساخت یک TextView در آموزش پیش در این آموزش قصد داریم به بررسی این نکته بپردازیم که به چه نحوی می توان متون فارسی را وارد اپلیکیشن خود نماییم. برای این منظور پروژه ای که در آموزش چهلم تحت عنوان My Prayer Counter ایجاد کردیم را در محیط اکلیپس باز نموده و دو بار روی فایل main.xml را از فولدر layout کلیک کرده تا باز شود.
  1. xml version="1.0" encoding="utf-8"?>
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:background="#fbfbdd"
  6. android:orientation="vertical" >
  7. android:id="@+id/txt_textOne"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:text="Large Text"
  11. android:textAppearance="?android:attr/textAppearanceLarge"
  12. android:textColor="#763f05"
  13. android:textSize="40dip" />

همانطور که در کد فوق مشاهده می کنیم، متدی تحت عنوان text وجود دارد که Value یا مقدار مرتبط با آن Large Text است. ما به سادگی قادر خواهیم بود تا این متن را به هر متن فارسی که تمایل داشته باشیم تبدیل کنیم که در این آموزش عبارت "تعداد ذکرهای من" را جایگزین می کنیم:


  1. xml version="1.0" encoding="utf-8"?>
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:background="#fbfbdd"
  6. android:orientation="vertical" >
  7. android:id="@+id/txt_textOne"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:text="تعداد ذکرهای من"
  11. android:textAppearance="?android:attr/textAppearanceLarge"
  12. android:textColor="#763f05"
  13. android:textSize="40dip" />

حال روی Tab مربوط به Graphical Layout کلیک کرده تا ببینیم خروجی این متن فارسی روی UI به چه شکلی است:


920809-a41-IMAGE 1.jpg

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


920809-a41-IMAGE 2.jpg

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


920809-a41-IMAGE 3.jpg

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


920809-a41-IMAGE 4.jpg

حال در بخش Target از منویی که پیش رو داریم می توانیم نسخه Android 3.0 به بالا را انتخاب نموده و در نهایت روی دکمه Edit AVD کلیک نماییم. اکنون مجدد به پنجره قبل بازگشته و با کلیک بر روی دکمه Start می توانیم دستگاه مجازی ویرایش شده خود را اجرا نماییم. پس از اجرای دستگاه مجازی که ممکن است کمی هم تا کاملاً اجرا شود به طول انجامد مجدد روی دکمه Run کلیک می کنیم:


920809-a41-IMAGE 5.jpg

همانگونه که در تصویر فوق مشخص است، این دستگاه مجازی جدید قادر به نمایش متون فارسی هم می باشد(لازم به ذکر است که اگر این دستگاه مجازی به صورت پیش فرض به صورت افقی بود با فشردن هم زمان دکمه های Ctrl و F12 می توان آنرا به صورت عمودی در آورد و بالعکس). نکته ای که در مورد UI وجود دارد این است که این TextView در مرکز رابط گرافیکی قرار ندارد. به منظور مرکز قرار دادن کلیه عناصر روی رابط گرافیکی نیاز است تا ابتدا Layout خود را با نشانگر موس انتخاب کنیم. برای این منظور در هر جایی روی UI به جزء TextView کلیک می کنیم تا کل Layout انتخاب شود. حال به پنجره Properties رفته و مطابق تصویر زیر تغییراتی را اعمال می کنیم:


920809-a41-IMAGE 6.jpg

با کلیک کردن در بخش Value مرتبط با متد Gravity همانطور که در تصویر فوق نشان داده شده است دکمه ای ظاهر می شود که با کلیک روی آن به پنجره زیر دست پیدا خواهیم کرد:


920809-a41-IMAGE 7.jpg

در پنجره فوق کلیه مقادیری که می توان برای متد gravity در نظر گرفت نشان داده شده است و همانگونه که از نام آنها بر می آید با اعمال هر یک از آنها جایگاه کلیه عناصر قرار گرفته روی UI تغییر خواهد کرد. به طور مثال چنانچه بخواهیم کلیه عناصر در مرکز Layout قرار گیرند می بایست Value مرتبط با center را تیک بزنیم اما از آنجا که در این آموزش قصد داریم تا TextView ما در مرکز قرار گرفته اما در عین حال در بالای Layout هم قرار گیرد می بایست گزینه center-horizontal را تیک بزنیم(به عنوان فعالیت تمرینی می توان تک تک آنها را تیک زده سپس به Graphical Layout رجوع کنیم تا ببینیم که هر یک از آنها چه عملکردی دارا است). حال روی گزینه OK کلیک می کنیم و مجدد اپلیکیشن خود را اجرا می کنیم:


920809-a41-IMAGE 8.jpg

می بینیم که متن ما در وسط UI قرار گرفته است. حال نیاز داریم تا یک TextView دیگر زیر TextView قبلی ایجاد کنیم که نقش کنتور یا شمارنده را داشته باشد (به منظور جلوگیری از طولانی شدن آموزش از ذکر توضیحات پیرامون نحوه ایجاد TextView جدید خودداری می نماییم).

تنها نکته ای که پیرامون این TextView جدید وجود دارد این است که اندازه متن آن را می بایست برابر با 60dip قرار دهیم که تعداد ذکرهایی که می گوییم بزرگتر به نظر آید و همچنین id اختصاص داده شده به آن را می بایست به خاطر داشت باشیم چرا که در فایل جاوای خود قرار است که به این TextView لینک دهیم. راه کاری جایگزینی که برای اختصاص یک id به عناصر روی UI وجود دارد این است که روی TextView مد نظر کلیک راست کرده سپس همانطور که در تصویر زیر مشخص است روی گزینه Edit ID کلیک نماییم:


920809-a41-IMAGE 9.jpg

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


920809-a41-IMAGE 10.jpg

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

حال روی دکمه OK کلیک کرده و این id به TextView دوم ما اختصاص خواهد یافت. در ادامه تکمیل اپلیکیشن خود نیاز به یک دکمه داریم تا با هر بار گفتن یک ذکر یک بار با انگشت خود روی آن بزنیم تا یک عدد به تعداد ذکر های گفته شده اضافه کند. برای این منظور یک دکمه روی UI خود ایجاد می کنیم (برای آشنایی بیشتر با مبحث دکمه ها به آموزش های 37 و 38 و 39 مراجعه نمایید).


920809-a41-IMAGE 11.jpg

به منظور اینکه ببینیم چه کد XML یی برای این دکمه در نظر گرفته شده است کد زیر را مد نظر قرار خواهیم داد:


  1. xml version="1.0" encoding="utf-8"?>
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:background="#fbfbdd"
  6. android:gravity="center_horizontal"
  7. android:orientation="vertical" >
  8. android:id="@+id/txt_textOne"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:text="تعداد ذکرهای من"
  12. android:textAppearance="?android:attr/textAppearanceLarge"
  13. android:textColor="#763f05"
  14. android:textSize="40dip" />
  15. android:id="@+id/txt_textTwo"
  16. android:layout_width="wrap_content"
  17. android:layout_height="wrap_content"
  18. android:text="0"
  19. android:textAppearance="?android:attr/textAppearanceLarge"
  20. android:textColor="#763f05"
  21. android:textSize="60dip" />
  22. android:id="@+id/button1"
  23. android:layout_width="140dip"
  24. android:layout_height="wrap_content"
  25. android:background="#763f05"
  26. android:text="+"
  27. android:textColor="#fbfbdd"
  28. android:textSize="100dip" />

چنانچه به تگ ابتدایی مربوط به Button توجه کنیم می توانیم ببینیم که چه خصوصیاتی برای آن در نظر گرفته شده است. تنها بخشی از کد مربوط به این دکمه که نیاز به تغییر دارد id اختصاص یافته به آن است که ترجیح می دهیم برای آنکه گویا تر باشد آنرا را به btn_buttonOne تغییر دهیم. نکته ای که در مورد id ها همواره بایستی به خاطر داشته باشیم این است که هر نامی را می توان برای id ها در نظر گرفت اما به هیچ وجه در انتخاب نام آنها نمی توانیم از علائمی همچون & و* و غیره استفاده کنیم.

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. به چه شکل می توان متون فارسی را در دستگاه مجازی نمایش داد؟
2. علت آنکه متون فارسی در دستگاه مجازیی با Target یی معادل با Android 2.1 اجرا نمی شود چیست؟
3. چگونه می توان عناصر روی یک Layout را وسط چین نمود؟

آموزش برنامه نویسی اندروید قسمت ۴۰: آموزش ساخت اپلیکیشن ذکر شمار (بخش اول) ساخت آیکان و رابط گرافیکی

اهداف آموزشی این قسمت عبارتند از:
1. خوشحال کردن مادر بزرگ خود!
2. ساخت یک پروژه کاربردی در اندروید
3. نحوه تبدیل واحدهای RGB به واحدهای Hexadecimal در فتوشاپ

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

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

درست است که پول نداریم اما دانش برنامه نویسی خوبی داریم. می دانیم که مادر بزرگ آدم همیشه هم در حال ذکر گفتن است و با خودمان فکر می کنیم که برای آشتی دادن مادر بزرگ با فناوری راه خوبی است که یک اپلیکیشن «ذکر شمار» برایش طرحی کنیم.

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

پس از رسیدن به خانه مادر بزرگمان، می بینیم که همه با خوشحالی هدیه های خود را به مادر بزرگ تقدیم می کنند و تنها کسی باقیمانده ما هستیم. با لبخند به مادر بزرگ می گوییم که لطفا بولوتوث را روشن کنید تا هدیه را برایتان بفرستم!

برای شروع کار همانطور که در آموزش هشتم توضیح داده شد یک پروژه جدید در محیط برنامه نویسی اکلیپس تحت عنوان My Prayer Counter به معنی "ذکر شمار من" ایجاد می کنیم:

920808-a40-IMAGE 1.jpg

همانطور که در تصویر فوق مشخص است UI اپلیکیشن ما در قالب یک فایل تحت عنوان main.xml که به صورت خودکار توسط اکلیپس ایجاد شده است در زیرشاخه فولدر layout که در زیرشاخه فولدر res قرار گرفته است می باشد. اکلیپس به صورت پیش فرض یک TextView حاوی عبارت Hello World به علاوه نام فایل جاوایی که در حین ساخت پروژه در نظر گرفتیم که در اینجا MainActivity است را ایجاد می کند. ابتدا نیاز است تا این TextView را با موس انتخاب کرده سپس دکمه Delete را فشار دهیم. اولین کاری که می بایست انجام دهیم این است تا آیکان اپلیکیشن خود را به موضوع اپلیکیشن مرتبط سازیم. حال طبق آموزش های 24 و 25 و 26 یک آیکان مرتبط با ذکر شمار طراحی می کنیم:


920808-a40-IMAGE 2.jpg

همانطور که در تصویری که از Emulator گرفته شده است مشخص است، آیکانی مرتبط طراحی کرده و در سه نسخه 36*36 و 48*48 و 72*72 تبدیل به فرمت PNG شده و در فولدر های مربوطه drawalbe-ldpi و drawable-mdpi و drawable-hdpi به ترتیب با نام ic-launcher.png قرار گرفته اند (عکس انتخاب شده برای این آیکان با نوشتن نام "صلوات" در گوگل در اولین صفحه از سرچ پیدا شده است).

حال مجدد به محیط اکلیپس بازگشته و این بار با نشانگر موس خود یکبار روی صفحه مشکی رنگ UI کلیک می کنیم. هدف از انجام اینکار این است که کل Layout ما انتخاب شود تا بتوانیم برخی خصوصیات آن را در پنجره Properties تغییر دهیم:


920808-a40-IMAGE 3.jpg

از آنجا که ما کل Layout را با نشانگر موس خود انتخاب کرده ایم، از اینرو همانطور که در تصویر فوق مشخص است خصوصیات LinearLayout به ما نشان داده می شوند. حال از میان گزینه های موجود Backgound به معنی "پس زمینه" را پیدا نموده و Value مرتبط با آن را #fbfbdd قرار می دهیم سپس دکمه Enter را می زنیم تا تغییرات اعمال شوند. در حقیقت برای آنکه یکنواختی مابین اجزای مختلف اپلیکیشن ما وجود داشته باشد در فتوشاپ با ابزار Eyedropper نمونه رنگی از روی آیکانی که در نظر گرفته شده انتخاب کرده ایم:


920808-a40-IMAGE 4.jpg

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

همانطور که در تصویر فوق با یک بیضی قرمز رنگ بزرگ نشان داده شده است جزئیات به نمایش درآمده از نمونه رنگ مد نظر RGB است و همانطور هم که قبلاً توضیح داده شد در سیستم عامل اندروید تنها رنگی که می توانیم مورد استفاده قرار دهیم واحد Hexadecimal است. برای تبدیل واحد RGB به Hexadecimal می بایست طبق تصویر زیر عمل نماییم:


920808-a40-IMAGE 5.jpg

منوی پنجره Color با یک فلش قرمز رنگ مشخص شده است. با کلیک روی منو پنجره دیگری باز خواهد شد که همانطور که در تصویر فوق مشخص است با کلیک روی گزینه Web Color Sliders رنگ های RGB را به واحدهای Hexadecimal تبدیل می کنیم:


920808-a40-IMAGE 6.jpg

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

اکنون اگر به UI خود نگاهی بیندازیم مشاهده خواهیم کرد که رنگ آن تغییر کرده است:


920808-a40-IMAGE 7.jpg

برای آنکه بتوانیم از رنگ تیره موجود در آیکان هم برای نوشته های روی UI استفاده کنیم، باز هم به روش فوق مقدار Hexadecimal آن را پیدا نموده تا در ادامه آموزش بتوانیم از این رنگ برای متون روی UI استفاده کنیم.

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


920808-a40-IMAGE 8.jpg

یک TextView روی UI قرار گرفته است اما از آنجا که رنگ متن داخل این TextView روشن است به دشواری متن داخل آن را می توان دید. حال بایستی از طریق پنجره Properties برخی خصوصیات این TextView را تغییر دهیم که برای اینکار می بایست ابتدا این TextView را با کلیک بر روی آن انتخاب کنیم:


920808-a40-IMAGE 9.jpg

اولین کاری که انجام می دهیم این است که id اختصاص داده شده به این TextView را به id مد نظر خود تغییر می دهیم. برای این TextView بنده id یی تحت عنوان txt_textOne را در نظر گرفته ام و این در حالی است که می توان با id اختصاص داده شده توسط اکلیپس یا هر id دیگری به کار خود ادامه دهیم.

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


920808-a40-IMAGE 10.jpg

کد #763f05 نمونه رنگی است که از متن داخل آیکان اپلیکیشن در فتوشاپ به دست آورده ایم که رنگی متمایل به قهوه ای است. در ارتباط با اندازه متن هم 40dip در نظر می گیریم:


920808-a40-IMAGE 11.jpg

می بینیم تغییراتی که در پنجره Properties ایجاد کردیم روی TextView اعمال شده اند. حال چنانچه روی Tab مربوط به main.xml کلیک کنیم کدی مشابه زیر مشاهده خواهیم کرد:


  1. xml version="1.0" encoding="utf-8"?>
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:background="#fbfbdd"
  6. android:orientation="vertical" >
  7. android:id="@+id/txt_textOne"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:text="Large Text"
  11. android:textAppearance="?android:attr/textAppearanceLarge"
  12. android:textColor="#763f05"
  13. android:textSize="40dip" />

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

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. به چه نحوی می توان یک واحد RGB را به یک واحد Hexadecimal در فتوشاپ تغییر داد؟
2. چرا آیکان اپلیکیشن را در سه اندازه متفاوت ایجاد می کنیم؟

آموزش برنامه نویسی اندروید قسمت ۳۹: شخصی سازی ظاهر یک دکمه‎

اهداف آموزشی این قسمت عبارتند از:
1. شخصی سازی یک دکمه
2. نحوه نامگذاری یک فایل XML برای ایجاد یک دکمه
3. آشنایی با گرادیانت و padding و stroke

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

920805-a39-IMAGE 1.jpg

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


920805-a39-IMAGE 2.jpg

برای شروع کار نیاز است تا از زیرشاخه فولدر res روی فولدر drawable راست کلیک کرده سپس از منوی New همانطور که در تصویر فوق مشخص است روی گزینه Android XML File کلیک کنیم (لازم به ذکر است چنانچه فولدر drawable در زیرشاخه فولدر res وجود نداشت ابتدا آن را ایجاد کنیم. به منظور فراگیری نحوه ایجاد یک فولدر جدید به آموزش دوازدهم مراجعه نمایید):


920805-a39-IMAGE 3.jpg

اکنون همانطور که در تصویر فوق مشخص است با پنجره ساخت یک فایل XML جدید رو به رو خواهیم شد. از بخش Resource Type می بایست گزینه Drawable را انتخاب کرده و از بخش Project می بایست نام پروژه ای که می خواهیم این فایل XML در آن ایجاد شود را انتخاب نماییم که در این آموزش پروژه Introduction to Buttons را انتخاب می کنیم. در بخش مربوط به File می بایست نامی برای این فایل XML جدید انتخاب نماییم که در این مثال نام button_background را انتخاب کرده ایم. در انتخاب نام فایل دقت داشته باشیم که از – و حروف بزرگ مثل A و علائمی همچون & نمی توانیم استفاده کنیم.

چنانچه نامی که برای این فایل در نظر گرفته ایم چند بخشی است می توان از _ مابین اسامی استفاده کرد. سپس از بخش Root Element می بایست گزینه shape را انتخاب نموده سپس روی گزینه Finish کلیک نماییم (در این مرحله از آموزش نیازی به کلیک کردن روی گزینه Next و اعمال تنظیمات بیشتر برای این فایل XML نیست).

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


920805-a39-IMAGE 4.jpg

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

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


920805-a39-IMAGE 5.jpg

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

چنانچه بخواهیم دکمه ما دارای padding باشد می بایست از دستور مرتبط با آن استفاده کنیم.


920805-a39-IMAGE-6.jpg

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

دستور size همانطور که از نامش مشخص است این وظیفه را دارا است تا اندازه دکمه را مشخص سازد.

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

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


920805-a39-IMAGE 7.jpg

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


920805-a39-IMAGE 8.jpg

سپس حرف a کوچک را نوشته و دکمه های Ctrl و Space را به صورت هم زمان فشار می دهیم و پنجره ای به صورت فوق نمایان خواهد شد. حال همانطور که در تصویر فوق نشان داده شده است روی اولین گزینه کلیک می کنیم:


920805-a39-IMAGE 9.jpg

اکنون مابین دو علامت گیومه می بایست یک علامت # قرار داده و رنگ مد نظر خود را وارد نماییم (برای آشنایی بیشتر با نحوه ایجاد رنگ در سیستم عامل اندروید به آموزش های سی و دوم و سی و سوم مراجعه نمایید).

از آنجا که قصد داریم دکمه ما زرد رنگ باشد کد #ffde57 را مابین دو علامت گیومه قرار می دهیم. حال همانطور که در تصویر زیر مشخص است پس از قرار دادن نشانگر موس خود بعد از گیومه دوم مجدد کلید های Ctrl و Space را زده و از پنجره ای که باز خواهد شد گزینه دوم را انتخاب می کنیم:


920805-a39-IMAGE 10.jpg

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


  1. xml version="1.0" encoding="utf-8"?>
  2. xmlns:android="http://schemas.android.com/apk/res/android" >
  3. android:color="#ffde57" />
  4.  

به همین روش سعی می کنیم تا ویژگی های بیشتری به دکمه خود بیفزایم:


  1. xml version="1.0" encoding="utf-8"?>
  2. xmlns:android="http://schemas.android.com/apk/res/android" >
  3. android:color="#ffde57" />
  4. android:radius="20dip" />
  5. android:width="4dip"
  6. android:color="#ffffff" />

در خط بعد که تگ مربوط به corners قرار دارد مقدار متد radius به معنی "شعاع" را برابر با 20dip قرار داده ایم. تگ مربوط به stroke دارای دو متد است که متد اول به مقدار 4dip عرض stroke را مشخص می کند و متد دوم به مقدار #ffffff رنگ سفید را برای این stroke در نظر می گیرد.

حال برای ادامه کار مطابق تصویر زیر عمل می کنیم:


920805-a39-IMAGE 11.jpg

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


920805-a39-IMAGE 12.jpg

از آنجا که دکمه Customized شده خود را در فولدر drawable ایجاد کردیم در این پنجره نیز می بایست روی این گزینه کلیک کرده و نام مد نظر خود را بیابیم. پس از انتخاب آن می توانیم روی دکمه OK کلیک نماییم:


920805-a39-IMAGE 13.jpg

به محض کلیک کردن روی گزینه OK خواهیم دید که خصوصیاتی که در فایل XML تعریف کرده بودیم روی دکمه ما اعمال خواهد شد.

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. برای شخصی سازی یک دکمه، آن را در کدام فولدر اپلیکیشن می بایست تعریف کرد؟
2. برای دکمه های شخصی چه ویژگی هایی را می توان در نظر گرفت که در حالت پیش فرض وجود ندارند؟
3. برای نامگذاری دکمه ها از چه روشی می بایست استفاده کرد؟


آموزش برنامه نویسی اندروید قسمت ۳۸: تغییر برخی خصوصیات اصلی یک دکمه‎

اهداف آموزشی این قسمت عبارتند از:
1. نحوه به کارگیری پنجره Properties جهت تغییر خصوصیات یک دکمه
2. نحوه تغییر id مرتبط با یک دکمه
3. نحوه تغییر متن داخل یک دکمه
4. نحوه تغییر رنگ متن داخل یک دکمه
5. نحوه تغییر اندازه فونت دکمه
6. نحوه تغییر استایل فونت
7. نحوه تغییر نوع فونت

همانگونه که در آموزش سی و هفتم دیدیم یکی از راه کارهای سریع برای اعمال تغییرات روی یک دکمه یا هر Widget یی استفاده از پنجره Properties است.

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

920730-a38-IMAGE 1.jpg

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


920730-a38-IMAGE 2.jpg

برای مثال همانطور که در تصویر فوق مشاهده می کنیم یکی از گزینه ها Id نام دارد و در بخش مقابل آن Value یا مقدار Id در نظر گرفته شده است. این Id در حقیقت همان id یی است که در آموزش گذشته برای دکمه خود تحت عنوان btn_myButton در نظر گرفتیم. به منظور تغییر id در نظر گرفته شده برای این دکمه روی Vaule مرتبط با این Id که در تصویر فوق با یک مستطیل قرمز رنگ مشخص شده است یک بار کلیک می کنیم:


920730-a38-IMAGE 3.jpg

با یک بار کلیک کردن روی این ناحیه، Value مرتبط با Id به رنگ آبی در آمده و این حاکی از آن است که می توان id یی که از قبل در نظر گرفته بودیم را ویرایش کنیم. یکی دیگر از ویژگی های استفاده از پنجره Properties تغییر متن داخل دکمه ها است:


920730-a38-IMAGE 4.jpg

همانطور که در تصویر فوق با یک فلش قرمز رنگ مشخص شده است گزینه ای تحت عنوان Text به معنی "متن" وجود دارد که این وظیفه را دارا است تا متن داخل دکمه را به نمایش در آورد. همانطور که Value مرتبط با Text در تصویر فوق با یک مستطیل قرمز رنگ مشخص شده است، این Value حاوی جمله Go to Next Page است که در آموزش قبل در بخش XML وارد کردیم. همانند نحوه تغییر id در پنجره Properties با کلیک کردن روی این Value قادر خواهیم شد تا مقدار آن را تغییر دهیم. در تصویر زیر با برخی از دیگر تنظمات کاربردی یک دکمه آشنا خواهیم شد:


920730-a38-IMAGE 5.jpg

در گزینه شماره 1 می توان رنگ متن داخل دکمه را تغییر داد (به منظور آشنایی بیشتر با رنگ ها در سیستم عامل اندروید به آموزش های سی و دوم و سی و سوم مراجعه نمایید).

گزینه شماره 2 این امکان برای توسعه دهنده فراهم آورده است تا بتواند اندازه متن داخل دکمه را تغییر دهد (لازم به ذکر است که برای اندازه متن می بایست یکی از واحدهای dp یا sp را مد نظر قرار دهیم). در گزینه شماره 3 می توان یکی از سه استایل bold، normal و یا italic را برای دکمه خود در نظر گرفت:


920730-a38-IMAGE 6.jpg

همانطور که در تصویر فوق ملاحظه می شود پس از کلیک کردن روی قسمتی که برای Value مرتبط با Text style در نظر گرفته شده است دکمه ای در بخش Value ظاهر می شود که با کلیک کردن روی آن پنجره زیر را مشاهده خواهیم کرد:


920730-a38-IMAGE 7.jpg

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

مجدد به تصویر قبل باز گشته و مورد 4 که Typeface است را مد نظر قرار می دهیم. در اندروید منظور از Typeface ساختار فونت از جهت نوع طراحی آن است که در حال حاضر چهار نوع Typeface بیشتر در نظر گرفته نشده است که عبارتند از noraml، sans، serif و monospace که در ادامه به توضیح پیرامون هر یک از آنها خواهیم پرداخت.

مورد normal همانگونه که از نامش پیدا است یک فونت عادی است. به عبارت دیگر هیچ فرقی نمی کند که از گزینه Typeface گزینه normal را انتخاب کنیم یا نکنیم چرا که به صورت پیش فرض نوع فونتی که برای دکمه ایجاد شده در نظر گرفته خواهد شد normal خواهد بود اگرچه که پس از ساخت یک دکمه جدید گزینه normal در منوی Typeface انتخاب نشده باشد.

مورد serif به نوعی از فونت ها اطلاق می گردد که دارای دنباله های بسیار کوچکی هستند که به یک حرف یا علامت می چسبند:


920730-a38-IMAGE 8.jpg

همانطور که در تصویر فوق نشان داده شده است به قسمت پایینی حرف A یک دنباله کوچک چسبیده است که اصطلاحاً در تایپوگرافی Serif نام دارد.

در زبان فرانسه معادل فارسی "بدون" Sans است. به عبارت دیگر Typeface یی که از جنس Sans Serif باشد به Typeface یی گفته می شود که همانند تصویر زیر آن دنباله های کوچک را نداشته باشد:


920730-a38-IMAGE 9.jpg

از جمله فونت های معروف Serif می توان به Times New Roman و از جمله فونت های معروف Sans Serif می توان به فونت Helvetica اشاره کرد.

مورد آخر از Typeface ها monospace نام دارد (نام دیگری که برای این نوع فونت در تایپوگرافی در نظر گرفته می شود fixed-width است به معنی "عرض ثابت"). کاربرد این نوع فونت بیشتر در محیط های برنامه نویسی است. به طور خلاصه می توان گفت که هرگاه کلیه کاراکترهای یک نوع فونت دارای عرض یکسانی باشند آن فونت یک monospace است:


920730-a38-IMAGE 10.jpg

همانگونه در که در تصویر فوق مشخص است نوشته بالایی با فونتی از جنس serif نوشته شده است و نوشته پایینی با فونتی از جنس monospace نوشته شده است. اگر به نوشته بالا خوب دقت کنیم می بینیم که هر کاراکتری بسته نوع آن کاراکتر عرض متفاوتی را نسبت به دیگر کاراکترها به خود اختصاص داده است. مثلا حرف r عرض به مراتب کمتری نسبت به حرف n را به خود نسبت داده است اما این در حالی است که در نوشته پایین که با یک فونت monospace نوشته شده است می توان گفت کلیه کاراکترها داری عرض "تقریباً" یکسانی هستند. از جمله فونت هایی از این دست می توان به فونت Courier اشاره کرد.

پس از توضیح مفصل پیرامون Typeface حال قصد داریم تا رنگ فونت دکمه ای که ایجاد کرده ایم را به قرمز تغییر داده، سپس اندازه فونت را به 24dip افزایش دهیم، استایل bold را برای فونت خود در نظر بگیریم و در نهایت از یک Typeface از جنس serif برای دکمه خود استفاده کنیم:


920730-a38-IMAGE 11.jpg

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. برای اندازه فونت از چه واحدهایی می توان استفاده کرد؟
2. چند نوع استایل در اکلیپس وجود دارد که می توان برای فونت های استفاده کرد؟
3. آیا اگر بخواهیم استایل فونت ما Noraml باشد بایستی حتما این Value را در بخش Text style وارد کنیم؟
4. تفاوت مابین Serif و Sans Serif چیست؟
5. منظور از monospace چیست؟
6. نمونه فونت های معروف Serif و Sans Serif و Monospace کدامند؟

آموزش برنامه نویسی اندروید- قسمت ۳۷: معرفی دکمه و نحوه ایجاد آن در یک اپلیکیشن‎

اهداف آموزشی این قسمت عبارتند از:
1. معرفی دکمه ها در اندروید
2. ایجاد یک دکمه جدید روی UI
3. نحوه نامگذاری دکمه ها
4. نحوه به کارگیری منوی Properties جهت تغییر تنظیمات یک دکمه

پس از آشنایی با دو نوع از رایج ترین انواع Layout ها در اندروید، در این آموزش قصد داریم تا به معرفی دکمه ها و نحوه ایجاد آنها در یک اپلیکیشن بپردازیم. برای این منظور همانطور که در آموزش هشتم توضیح داده شد یک پروژه جدید در محیط برنامه نویسی اکلیپس تحت عنوان Introduction to Buttons به معنی "معرفی دکمه ها" ایجاد می کنیم.

920729-a37-IMAGE 1.jpg

همانطور که در تصویر فوق ملاحظه می شود اکلیپس یک Layout به صورت خودکار تحت عنوان main.xml ساخته و یک TextView حاوی جمله Hello World روی آن ایجاد می کند. از آنجا که در این آموزش قصد داریم تا بیشتر پیرامون نحوه ساخت دکمه ها در یک اپلیکیشن صحبت کنیم از اینرو این TextView را با یک بار کلیک کردن روی آن انتخاب کرده سپس دکمه Delete کیبورد را می زنیم:


920729-a37-IMAGE 2.jpg

همانطور که در تصویر فوق نشان داده شده است از Tab مربوط به Form Widgets با نشانگر موس خود Button را گرفته و به سمت Layout می کشیم. به محض اینکه نشانگر موس روی UI قرار گیرد یک علامت به علاوه کنار نشانگر موس ظاهر خواهد شد که به این معنی است که می توان با رها کردن نشانگر موس خود این دکمه را به UI اضافه کرد. اگر به تصویر بالا خوب توجه کنیم خواهیم دید که در قسمت گوشه بالا سمت چپ یک نقطه چین شبرنگ ایجاد شده است که این نقطه چین بدان معنا است که این دکمه در آن قسمت قرار خواهد گرفت. حال پس از رها کردن دکمه موس خواهیم دید که یک دکمه روی UI قرار خواهد گرفت:


920729-a37-IMAGE 3.jpg

اکنون با کلیک کردن روی Tab مربوط به main.xml کد مربوط به Layout این اپلیکیشن را خواهیم دید:


  1. xml version="1.0" encoding="utf-8"?>
  2. 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. android:id="@+id/button1"
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:text="Button" >

همانطور که از کد فوق مشخص است Layout ما از جنس LinearLayout است که فقط یک دکمه روی آن قرار دارد. پس از تگ مربوط به Button اولین خط از کد مربوط به id است که مخفف واژه Identification به معنی "تعیین هویت" یا "شناسایی" می باشد. id اختصاص داده شده به این دکمه button1 است و این در حالی است که برخورداری یک دکمه از یک id دارای اهمیت بسیاری است چرا که در Activity مربوط به این اپلیکیشن فقط از طریق همین id است که می توانیم عملکردی برای این دکمه تعریف کنیم.

آنچه در id یک دکمه از اهیمت بسزایی برخوردار است شیوه نامگذاری آن دکمه است. به عبارت دیگر زمانیکه ما در اپلیکیشن خود فقط یک الی دو دکمه داشته باشیم نامگذاری دکمه به هر شیوه ای خیلی مشکل زا نخواهد بود اما زمانیکه تعداد دکمه ها در یک اپلیکیشن زیاد باشند می بایست سعی کنیم که یک شیوه نامگذاری را در برنامه نویسی خود مد نظر قرار داده و آن را در کل اپلیکیشن دنبال کنیم. به طور مثال برای نامگذاری دکمه ها می توان از پیشوند btn که می توان آن را مخفف واژه Button به معنی "دکمه" در نظر گرفت به علاوه یک _ سپس نامی گویا برای دکمه استفاده کرد. به طور مثال می توان نام دکمه ای که ایجاد کردیم را به btn_myButton تغییر دهیم. به خاطر داشته باشیم که در نامگذاری دکمه ها به هیچ وجه نمی توانیم از علائمی همچون & و % و $ و غیره استفاده کنیم.

در خط دوم کد مربوط به این دکمه عرض این دکمه قرار دارد که مقدار آن برابر با wrap_content است به این معنی که عرض این دکمه به اندازه ای خواهد بود که نوشته داخل آن را در خود جای دهد. خط بعدی به اندازه ارتفاع دکمه اختصاص داده شده است که مقداری مشابه با مقدار عرض دکمه برای آن در نظر گرفته شده است. در نهایت کد مربوطه به نوشته داخل دکمه است که حاوی مقداری معادل با Button به معنی "دکمه" است. به منظور شخصی سازی عنوان این دکمه نام آن را به Go to Next Page به معنی "برو به صفحه بعد" تغییر می دهیم. اکنون پس از بازگشتن به Tab مربوط به Graphical Layout با تصویر زیر مواجه خواهیم شد:


920729-a37-IMAGE 4.jpg

می بینیم که نام این دکمه به نام دلخواه ما تغییر کرده است. چنانچه بخواهیم id مربوط به این دکمه را بدون مراجعه به کد XML تغییر دهیم می توان راه کار دیگری که در تصویر زیر آمده است را دنبال کنیم:


920729-a37-IMAGE 5.jpg

در حقیقت با انتخاب دکمه ای که می خواهیم id آن را تغییر دهیم و راست کلیک کردن روی آن پنجره فوق نمایان خواهد شد و همانطور که در تصویر فوق با یک بیضی قرمز رنگ مشخص شده است می بایست روی گزینه Edit ID کلیک کرده و در پنجره دیگری که باز خواهد شد id این دکمه را تغییر دهیم:


920729-a37-IMAGE 6.jpg

اگر خاطران باشد برای این دکمه id یی تحت عنوان btn_myButton را در بخش XML در نظر گرفتیم. حال همان نام در این پنجره به نمایش در آمده است که چنانچه تمایل داشته باشیم می توانیم این نام را تغییر داده و روی دکمه OK کلیک کنیم.

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


920729-a37-IMAGE 7.jpg

همانطور که در تصویر فوق مشخص است ابتدا پنجره Properties را باز می کنیم (چنانچه این پنجره بسته باشد همانطور که در تصویر زیر نشان داده شده است از منوی اصلی Window روی Show View سپس روی گزینه Properties کیک می کنیم):


920729-a37-IMAGE 8.jpg

حال با کلیک کردن روی دکمه یا Widget یی که روی UI قرار دارد خواهیم توانست به تنظیمات آن در بخش Properties دست پیدا کنیم. همانطور که در تصویر پیش مشخص است، پس از کلیک کردن روی تنها دکمه قرار گرفته روی UI سه منوی Button و Misc و Deprecated در پنجره Properties نمایان می شود. حال روی منوی Button کلیک کرده تا به زیرشاخه های آن دست پیدا کنیم:


920729-a37-IMAGE 9.jpg

می بینیم زیرشاخه منوی Button لیست بلندی از تنظیماتی است که می توان برای این دکمه در نظر گرفت.

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. به چه شکل می توان یک دکمه جدید روی UI ایجاد کرد؟
2. هدف از ایجاد یک id برای دکمه ها چیست؟
3. چگونه می توان نام پیش فرض یک دکمه را به نام دلخواه خود تغییر دارد؟
4. چه راه کارهایی برای تغییر id یک دکمه وجود دارد؟

آموزش برنامه نویسی اندروید- قسمت ۳۶: آشنایی با RelativeLayout در اندروید

اهداف آموزشی این قسمت عبارتند از:
1. معرفی RelativeLayout
2. نحوه تغییر یک LinearLayout به یک RelativeLayout
3. آشنایی با برخی متدهای مرتبط با RelativeLayout

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

حال که نوع Layout ما LinearLayout است اگر سعی کنیم تا با موس خود یکی از TextView ها را گرفته و روی صفحه جا به جا کنیم، مشاهده می کنیم که نمی توانیم عناصر روی UI را به هر قسمتی که تمایل داریم مثلا پایین صفحه انتقال دهیم بلکه تنها گزینه ای که پیش روی ما است این می باشد که چنانچه Layout ما vertical باشد خواهیم توانست یک TextView با موس گرفته و آنرا به پایین یا بالای TextView دیگری کشیده و رها سازیم و یا اگر Layout ما horizontal یا "افقی" باشد فقط می توانیم یک TextView را با موس گرفته و آنرا به سمت راست یا چپ TextView دیگری کشیده و رها سازیم. به عبارت دیگر به هیچ وجه نخواهیم توانست تا با گرفتن یک TextView و کشیدن آن به سمت پایین صفحه آن را در آنجا قرار دهیم.

نوع Layout به کار گرفته شده در این پروژه LinearLayout است و چنانچه بخواهیم آن را به یک RelativeLayout تبدیل کنیم می بایست به صورت زیر عمل کنیم:


920721-a36-IMAGE 1.jpg

همانطور که در تصویر فوق مشاهده می شود با قرار دادن نشانگر موس خود روی UI یا همان صفحه مشکلی رنگ و راست کلیک کردن پنجره ای باز خواهد شد که از میان گزینه های آن همانطور که در تصویر فوق با یک بیضی قرمز رنگ مشخص شده است روی Change Layout به معنی "تغییر Layout پروژه" کلیک کرده و پنجره ای به شکل زیر خواهیم دید:


920721-a36-IMAGE 2.jpg

همانطور که در پنجره فوق مشاهده می شود مقابل New Layout Type: به معنی "نوع جدید Layout " یک Drop Down لیست است که با باز کردن آن می توانیم به لیستی از انواع مختلف Layout های مورد استفاده در یک اپلیکیشن دست پیدا کنیم. در این مثال پس از کلیک روی لیست گزینه RelativeLayout را انتخاب می کنیم. سپس با گزینه ای تحت عنوان Flatten hierarchy مواجه می شویم. در حقیقت زمانیکه بخواهیم یک Layout را به RelativeLayout تبدیل کنیم این گزینه نمایان خواهد شد. در صورتیکه این گزینه را تیک بزنیم این امکان برای ما فراهم خواهد شد تا نه تنها بتوانیم نوع Layout خود را به یک RelativeLayout تبدیل کنیم بلکه این امکان برای ما فراهم خواهد شد تا به صورت خودکار سلسله مراتب و جایگاه عناصر داخل UI را نیز تبدیل کنیم. به عبارت دیگر اندازه عناصر داخل UI و همچین ترتیب و جایگاه آن ها را نیز مد نظر قرار داده و بهترین حالت ممکن را ایجاد خواهد کرد. اکنون می توانیم روی گزینه OK کلیک نماییم.

پس از کلیک کردن روی دکمه OK و باز گشتن به محیط اکلیپس مشاهده خواهیم کرد که چیزی تغییر نکرده است اما این در حالی است که نوع Layout ما از LinearLayout به RelativeLayout مبدل شده و از این پس دست ما به مراتب برای تغییر مکان عناصر روی UI باز تر خواهد بود. با کلیک کردن روی Tab مربوط به main.xml کد زیر را مشاهده خواهیم کرد:


  1. xml version="1.0" encoding="utf-8"?>
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/RelativeLayout1"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. android:orientation="horizontal" >
  7. android:id="@+id/TextView1"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:layout_alignBaseline="@+id/textView1"
  11. android:layout_alignParentLeft="true"
  12. android:layout_alignParentTop="true"
  13. android:text="@string/hello">
  14. android:id="@+id/textView1"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:layout_alignParentTop="true"
  18. android:layout_toRightOf="@+id/TextView1"
  19. android:text="Large Text"
  20. android:textAppearance="?android:attr/textAppearanceLarge" >

همانطور که در کد فوق مشاهده می شود تگ های ابتدایی و انتهای به RelativeLayout تبدیل شده اند. لازم به ذکر است که به منظور تبدیل یک LinearLayout به یک RelativeLayout صرفاً با تغییر این دو تگ می توان این تغییر را انجام داد اما این در حالی است که اگر از این روش استفاده کنیم امکانی که گزینه Flatten hierarchy برای ما ایجاد می کرد محروم خواهیم شد (پیشنهاد می شود همواره برای تبدیل Layout ها به یکدیگر از روش اول استفاده شود چرا که روش فوق الذکر احتمال خطای کدنویسی ما افزایش خواهد داد).

اگر به کد فوق با دقت بیشتری نگاه کنیم خواهیم دید که علاوه بر تغییر تگ های ابتدای و انتهای فایل XML تعدادی متد جدید دیگر نیز به هر یک از TextView ها اضافه شده است. به طور خلاصه می توان گفت که این متدهای جدید همان قابلیتی که از آن طریق خواهیم توانست عناصر روی UI را در هرکجای Layout که خواستیم قرار دهیم به اپلیکیشن ما اضافه می کنند. پیش از توضیح بیشتر پیرامون این متدها مجدد به Tab مربوط به Graphical Layout باز می گردیم:


920721-a36-IMAGE 3.jpg

همانطور که در تصویر فوق نشان داده شده است با یک بار کلیک کردن روی TextView یی که حاوی متن Large Text است خواهیم دید که پنجره کوچکی نمایان خواهد شد که در تصویر فوق با یک مستطیل قرمز رنگ مشخص شده است. در حقیقت اینها همان متدهای جدیدی است که به این TextView پس از تبدیل Layout خود به RelativeLayout ایجاد شده اند. متد بالا متدی است تحت عنوان toRightOf به معنی "قرار گرفته در سمت راست ... " که Value این متد هم TextView1 است. به عبارت دیگر TextView1 همان TextView یی است که به صورت خودکار در حین ساخت اپلیکیشن ایجاد شده و حاوی عبارت Hello World می باشد. به طور خلاصه این متد حاکی از آن است که این TextView یی که روی آن کلیک کرده ایم در سمت راست TextView یی تحت عنوان TextView1 قرار دارد.

متد دومی که در تصویر فوق مشاهده می شود alignParentTop نام دارد که معنی تحت الفظی آن "قرار گرفته به موازات قسمت بالایی رابط گرافیکی" می باشد. به عبارت دیگر خود RelativeLayout به منزله یک ظرفی است که دیگر عناصر روی UI همچون TextView ها و غیره را در خود جای می دهد. از همین روی RelativeLayout به عنوان Parent یا "والد" این TextView حساب خواهد شد. مقدار این متد برابر با true است یعنی این TextView به موازات قسمت فوقانی RelativeLayout قرار گرفته است. در حقیقت از آنجا که پس از تبدیل Layout خود به RelativeLayout هیچ گونه تغییری روی UI خود اعمال نکرده ایم، بالتبع همین دو متد در مورد این TextView نوشته شده اند. حال همانند تصویر زیر روی TextView دیگر کلیک می کنیم:


920721-a36-IMAGE 4.jpg

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


920721-a36-IMAGE 5.jpg

همانطور که در تصویر فوق مشاهده می شود با نشانگر موس TextView یی که حاوی متن Large Text است را گرفته و به وسط UI می کشیم و سپس دکمه موس خود را رها می کنیم. حال به متدهای مرتبط جدیدی که برای این TextView ایجاد شدند توجه کرده و می بینیم که تغییر کرده اند. به طور مثال متدی تحت عنوان centerHorizontal با Value یی تحت عنوان true برای این TextView ایجاد شده است. اگر به تصویر فوق توجه کنیم خواهیم دید که یک خط فرضی شبرنگ به صورت عمودی روی صفحه قرار گرفته است(البته از آنجا که ممکن است شما این TextView را دقیقاً در وسط UI رها نکرده باشید این خط فرضی را مشاهده نکنید که در این صورت پیشنهاد می شود این TextView را با نشانگر موس گرفته و آنقدر آن را به چپ و راست بکشیم که این خط نمایان شود). به طور کلی این خط حاکی از آن است که این TextView دقیقاً در وسط UI به صورت افقی قرار گرفته است.

حال برای مشاهده کل متدهای ایجاد شده برای این TextView پس از تغییر جایگاه آن روی Tab مربوط به main.xml کلیک می کنیم:


  1. xml version="1.0" encoding="utf-8"?>
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/RelativeLayout1"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. android:orientation="horizontal" >
  7. android:id="@+id/TextView1"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:layout_alignBaseline="@+id/textView1"
  11. android:layout_alignParentLeft="true"
  12. android:layout_alignParentTop="true"
  13. android:text="@string/hello" >
  14. android:id="@+id/textView2"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:layout_below="@+id/TextView1"
  18. android:layout_centerHorizontal="true"
  19. android:layout_marginTop="190dp"
  20. android:text="Large Text"
  21. android:textAppearance="?android:attr/textAppearanceLarge" >

اگر به TextView دوم نگاه کنیم می بینیم که سه متد جدید به آن اضافه شده است. متد اول below به معنی "زیر" است که Value مرتبط با آن @+id/TextView1 است. به عبارت دیگر این متد حاکی از آن است که این TextView زیر یک TextView دیگر تحت عنوان TextView1 قرار گرفته است.

متد بعدی centerHorizontal است که Value آن ture است که حاکی از آن است که این TextView به صورت افقی در وسط UI قرار گرفته است و متد آخر marginTop است که Value آن 190dp است که حاکی از آن است که این TextView دارای فاصله 190dp از بالای UI می باشد(به خاطر داشته باشیم که در XML کلیه Value ها داخل گیومه قرار می گیرند).

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

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. به چه نحوی می توان یک LinearLayout را به یک RelativeLayout به بالعکس تبدیل کرد؟
2. منظور از Flatten hierarchy چیست؟
3. در یک LinearLayout تا چقدر دست ما باز است که جایگاه عناصر روی UI را تغییر دهیم؟
4. در یک فایل XML به چه نحوی یک Value را به یک متد اختصاص می دهیم؟

آموزش برنامه نویسی اندروید - قسمت ۳۵: آشنایی با LinearLayout

اهداف آموزشی این قسمت عبارتند از:
1. برنامه نویسی مهم تر است یا طراحی رابط گرافیکی
2. آشنایی با LinearLayout
3. نحوه به کار گیری Graphical Layout

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

برنامه نویسی مهم تر است یا طراحی رابط گرافیکی؟

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

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

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

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


انواع Layout ها

به طور کلی می توان گفت که هر فایل XML در برگیرندۀ یکی از انواع مختلف Layout ها می باشد. برای مثال پروژه ای جدید تحت عنوان Layouts به معنی "انواع Layout ها" در محیط اکلیپس ایجاد می کنیم(برای آشنایی بیشتر با نحوه ساخت یک پروژه جدید در محیط برنامه نویسی اکلیپس به آموزش هشتم مراجعه نمایید). پس از باز کردن فایل main.xml که در زیر شاخه فولدر layout قرار دارد، با کد زیر مواجه خواهیم شد:


  1. xml version="1.0" encoding="utf-8"?>
  2. 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. android:layout_width="fill_parent"
  7. android:layout_height="fill_parent"
  8. android:text="@string/hello"
  9. android:textColor="#fff">

همانطور که در کد فوق مشاهده می کنیم، نوع Layout به کار گرفته شده در این پروژه به صورت پیش فرض یک LinearLayout می باشد(لازم به ذکر است واژه Linear از واژه Line به معنی "خط" گرفته شده است که به معنی "خطی" می باشد).

در یک LinearLayout همانطور که از نام این Layout بر می آید، عناصر روی صفحه در امتداد یک خط یکی پس از دیگری قرار می گیرند. حال اینکه این عناصر به صورت عمودی در کنار یکدیگر قرار گیرند یا به صورت افقی بسته تنظیماتی است که داخل این Layout انجام می دهیم. همانطور که در کد فوق ملاحظه می شود Value متد orientation این Layout معادل با vertical به معنی "عمودی" در نظر گرفته شده است. به عبارت دیگر اگر مثلاً یک TextView دیگر به این Layout اضافه کنیم، این TextView جدید زیر TextView قبلی قرار می گیرد و هر دو به صورت عمودی در کنار یکدیگر قرار می گیرند.


نحوه به کار گیری Graphical Layout

همانطور که در آموزش بیست و هشتم توضیح داده شد، می توانیم با کدنویسیی مشابه آنچه در آن آموزش دیدیم، اقدام به ایجاد یک TextView ، دکمه و یا هر چیزی دیگری روی UI اپلیکیشن خود نماییم اما این در حالی است که اینکار نه تنها زمان بر می باشد بلکه احتمال خطای ما را نیز افزایش خواهد داد. به عبارت دیگر با استفاده از Graphical Layout به سادگی با استفاده از Drag & Drop خواهیم توانست بدون نیاز به نوشتن کد اقدام به ساخت عناصر مختلفی همچون TextView نماییم. برای روشن شدن این مطلب، این کار را به صورت عملی انجام خواهیم داد:


920718-a35-IMAGE 1.jpg

همانطور که در تصویر فوق مشاهده می کنیم، با کلیک کردن روی گزینه Graphical Layout که با یک بیضی قرمز رنگ مشخص شده است به محیط گرافیکی فایل XML مرتبط با Layout دست پیدا خواهیم کرد. همانطور که در قسمت فوق توضیح داده شد، قصد داریم تا یک TextView دیگر به UI خود اضافه کنیم.

برای این منظور از Tab های مختلفی که در Graphical Layout وجود دارد روی گزینه Form Widgets کلیک کرده و از میان گزینه های موجود یکی از گزینه های مربوط به TextView را انتخاب می کنیم(به طور کلی برای ساخت یک TextView سه گزینه TextView ، Medium Text و Large Text وجود دارد). برای مثال، همانطور که در تصویر فوق مشاهده می شود، با موس خود گزینه Large Text را گرفته و به سمت UI می کشیم و به محض اینکه نشانگر موس ما روی UI قرار گیرد یک علامت به علاوه کوچک کنار نشانگر موس نمایان خواهد شد که به معنی این است که پس از رها کردن دکمه موس TextView به UI اضافه خواهد شد:


920718-a35-IMAGE 2.jpg

در تصویر فوق نقطه چینی به رنگ شبرنگ با یک فلش قرمز رنگ مشخص شده است. در حقیقت این نقطه چین حاکی از آن است که این TextView جدید که قرار است روی UI قرار بگیرد، داخل مستطیلی قرار خواهد گرفت که با نقطه چین زیر TextView قبلی مشخص شده است(در واقع از آنجا که Value متد orientation این Layout معادل با vertical است، TextView جدید زیر TextView قبلی قرار خواهد گرفت):


920718-a35-IMAGE 3.jpg

پس از رها کردن دکمه موس، TextView جدید روی UI قرار می گیرد(لازم به ذکر است از آنجا که از میان سه نوع TextView گزینه Large Text را انتخاب کردیم، از اینرو اندازه فونت این TextView جدید بزرگ تر از حالت قبلی خواهد بود).

اکنون اگر روی Tab مربوط به main.xml کلیک کنیم خواهیم دید که یک TextView دیگر پس از TextView قبلی ایجاد شده است:


  1. xml version="1.0" encoding="utf-8"?>
  2. 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. android:layout_width="fill_parent"
  7. android:layout_height="wrap_content"
  8. android:text="@string/hello" >
  9. android:id="@+id/textView1"
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:text="Large Text"
  13. android:textAppearance="?android:attr/textAppearanceLarge" >

حال فرض کنیم که به جای آنکه این دو TextView زیر یکدیگر به صورت عمودی قرار گیرند، می خواهیم آن دو را در کنار یکدیگر به صورت افقی قرار دهیم.

برای این منظور دو راه کار وجود دارد که یک از طریق ویرایش فایل XML است و دیگری از طریق پنجره Properties است که در ابتدا این کار را از طریق ویرایش فایل XML انجام خواهیم داد. همانطور که در کد فوق ملاحظه می شود، در کد مربوطه به LinearLayout مقدار نسبت داده شده به متد orientation برابر با vertical است. حال اگر این مقدار را به horizontal تغییر دهیم عناصر داخل این Layout به صورت افقی کنار یکدیگر قرار خواهند گرفت. اکنون برای مشاهده نتیجه مجدد روی Tab مربوط به Graphical Layout کلیک می کنیم:


920718-a35-IMAGE 4.jpg

همانطور که در تصویر فوق ملاحظه می شود، پس از تغییر مقدار متد orientation از حالت vertical به horizontal فقط همان TextView اول را خواهیم دید و TextView جدیدی که ساختیم از دید پنهان است. در حقیقت علت این مسئله این است که همانطور که در تصویر فوق مشاهده می شود width یا عرض TextView قبلی برابر با fill_parent است:


920718-a35-IMAGE 5.jpg

به عبارت دیگر عرض این TextView کل صفحه UI را در برخواهد گرفت از این روی TextView جدیدی که به صورت افقی در کنار آن قرار گرفته است به بیرون UI رانده شده است. برای رفع این مشکل می بایست مقدار متد width را از حالت fill_parent به wrap_content تغییر دهیم(برای آشنایی بیشتر با این مقادیر به آموزش بیست و هشتم مراجعه نمایید):


920718-a35-IMAGE 6.jpg

اکنون مشاهده می کنیم که هر دو TextView در کنار یکدیگر قرار گرفته اند. راهکار دوم برای تغییر مقدار width از fill_parent به wrap_content استفاده از پنجره Properties است. برای این منظور مقدار متد width را دوباره با حالت اول باز می گردانیم تا این بار این تغییرات را در پنجره Properties اعمال کنیم:


920718-a35-IMAGE 7.jpg

ابتدا روی چیزی که می خواهیم تنظیمات آن را در پنجره Properties تغییر دهیم کلیک می کنیم تا انتخاب شود (مرحله 1). سپس در پنجره Properties روی Tab مربوط به Misc کلیک می کنیم تا زیرشاخه های آن باز شوند (مرحله 2) و در نهایت همانطور که در مرحله 3 نشان داده شده است روی مقدار مقابل Layout width کلیک کرده و روی گزینه wrap_content کلیک می کنیم تا انتخاب شود:


920718-a35-IMAGE 8.jpg

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

پیش از این گفتیم که برای تغییر مقدار متد orientation از vertical به horizontal راه کار دیگری هم وجود داشته و آن استفاده از پنجره Properties است.

پس از آنکه تنظیمات UI را به حال اول برگرداندیم، ابتدا روی جایی در صفحه مشکی UI کلیک می کنیم. با این کار به اکلیپس می فهمانیم که منظور ما از این کار انتخاب کل UI است. سپس به پنجره Properties رفته و تنظیمات آن را به صورت زیر تغییر می دهیم:


920718-a35-IMAGE 9.jpg

می بینیم که مجدد هر دو TextView در کنار یکدیگر قرار گرفته اند:


920718-a35-IMAGE 10.jpg

1. کدنویسی مهم تر است یا طراحی رابط گرافیکی؟
2. منظور از یک LinearLayout چیست؟
3. مزیت استفاده از Graphical Layout نسبت به ویرایش XML به صورت دستی چیست؟

آموزش برنامه نویسی اندروید - قسمت ۳۴: نحوه ذخیره سازی پروژه ها در اکلیپس

اهداف آموزشی این قسمت عبارتند از:
1. نحوه ذخیره سازی پروژه ها در اکلیپس
2. نحوه Import کردن یک پروژه به اکلیپس

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

نحوه ذخیره سازی پروژه ها در اکلیپس

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


920716-a34-IMAGE 1.jpg

از منوی اصلی اکلیپس روی گزینه File کلیک کرده سپس روی گزینه Switch Workspace کلیک می کنیم و همانطور که در تصویر فوق با یک فلش قرمز رنگ مشخص شده است روی گزینه Other کلیک می کنیم:


920716-a34-IMAGE 2.jpg

سپس پنجره ای به صورت فوق باز خواهد شد که نشانگر محلی است که Workspace ما در آن ذخیره شده است. برای مثال Workspace خود را روی درایو C داخل فولدر dev ذخیره کرده ام. اکنون که مشخص شد Workspace در چه محلی ذخیره شده است، به راحتی می توانیم وارد آن فولدر شویم(لازم به ذکر است این مکان ممکن است روی سیستم هر کاربری متفاوت باشد):


920716-a34-IMAGE 3.jpg

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


920716-a34-IMAGE 4.jpg

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

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


920716-a34-IMAGE 5.jpg

پس از کلیک کردن روی گزینه Add to archive پنجره ای به صورت فوق باز خواهد شد. از میان کلیه تنظیمات این پنجره صرفاً نیاز است که فرمت فایلی که می خواهیم ایجاد کنیم را همانطور که در تصویر فوق با یک فلش قرمز رنگ نشان داده شده است روی گزینه ZIP قرار دهیم و مابقی تظیمات را به صورت پیش فرض بگذاریم. حال می توانیم روی گزینه OK کلیک نماییم:


920716-a34-IMAGE 6.jpg

به محض کلیک کردن روی گزینه OK یک فایل zip با همان نامی که برای پروژه خود در نظر گرفته بودیم ایجاد خواهد شد. حال می توانیم این فایل جدید zip را Cut کردن و جایی روی سیستم خود ذخیره سازیم. برای این مثال بنده آن را روی Desktop قرار خواهم داد.

اکنون نرم افزار اکلیپس را اجرا می کنیم:


920716-a34-IMAGE 7.jpg

پس از مراجعه به پنجره Package Explorer همانطور که در تصویر فوق مشاهده می شود تنها پروژه خود را ملاحظه خواهیم کرد. از آنجا که ما توانسته ایم با موفقیت پروژه خود را به صورت یک فایل zip ذخیره سازیم، خواهیم توانست با خیال راحت این پروژه را Delete کنیم:


920716-a34-IMAGE 8.jpg

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


920716-a34-IMAGE 9.jpg

پس از کلیک کردن روی گزینه Delete با پنجره جدیدی به صورت بالا مواجه خواهیم شد. در این تصویر گزینه ای تحت عنوان Delete project content on disk با یک فلش قرمز رنگ مشخص شده است. این عبارت به معنی "محتویات این پروژه را از روی هارد دیسک پاک کن" می باشد. به عبارت دیگر اگر این گزینه را تیک دار نماییم، کل این پروژه را از روی سیستم خود پاک خواهیم کرد و دیگر به هیچ وجه نخواهیم توانست به آن دست پیدا کنیم(لازم به ذکر است که پس از پاک کردن پروژه ها در اکلیپس، پروژه های Delete شده به Recycle Bin منتقل نخواهند شد و از همین رو است که نمی توانیم به آنها دسترسی پیدا کنیم).

حال چنانچه این گزینه را تیک دار نکنیم، این پروژه فقط از داخل Package Explorer پاک خواهد شد و این در حالی است که هنوز در داخل Workspace باقی خواهد ماند. از آنجا که در این مثال از قبل یک Backup یا فایل پشتیبان از پروژه خود گرفته ایم با خیال راحت می توانیم تیک گزینه فوق را بزنیم و سپس روی گزینه OK کلیک کنیم:


920716-a34-IMAGE 10.jpg

حال با نگاهی به فولدر Workspace خواهیم دید که این پروژه کاملاً از روی سیستم ما پاک شده است. اکنون اگر به پنجره Package Explorer در محیط اکلیپس نگاهی بیندازیم، خواهیم دید که هیچ پروژه ای داخل آن نیست:


920716-a34-IMAGE 11.jpg

نحوه Import کردن یک پروژه به اکلیپس

اکنون فرض کنیم که قصد داریم تا اولین پروژه ای را که در قسمت هشتم از آموزش ها ایجاد کردیم و در این آموزش از روی آن یک Backup گرفتیم را مجدد وارد اکلیپس کنیم تا تغییراتی روی آن اعمال کنیم:


920716-a34-IMAGE 12.jpg

همانطور که پس از تبدیل پروژه خود به یک فایل zip گفتیم، این فایل را روی Desktop قرار می دهیم. حال به محیط اکلیپس باز گشته و همانند تصویر زیر از منوی اصلی نرم افزار روی گزینه فایل کلیک کرده و روی گزینه Import کلیک می نماییم:


920716-a34-IMAGE 13.jpg

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


920716-a34-IMAGE 14.jpg

همانطور که در تصویر فوق مشاهده می کنیم، چندین گزینه وجود دارند که از میان آنها روی فولدر General کلیک کرده و سپس همانطور که در تصویر فوق با یک فلش قرمز رنگ مشخص شده است گزینه Existing Projects into Workspace به معنی "وارد کردن پروژه های موجود به داخل Workspace اکلیپس" را انتخاب کرده و سپس روی گزینه Next کلیک می کنیم:


920716-a34-IMAGE 15.jpg

پس از کلیک روی گزینه Next با پنجره فوق مواجه خواهیم شد که دارای دو گزینه است. از آنجا که فرمت فایلی که می خواهیم به اکلیپس Import کنیم zip است، از اینرو گزینه Select archive file که در تصویر فوق با یک بیضی قرمز رنگ مشخص شده است را انتخاب نموده سپس روی گزینه Browse کلیک می کنیم و با پنجره ای به صورت زیر مواجه خواهیم شد:


920716-a34-IMAGE 16.jpg

حال در این مرحله می بایست به مکانی که فایل zip خود را در آن قرار داده ایم برویم و از آنجا که در این آموزش فایل خود را روی Desktop قرار داده ایم، به Desktop رفته، فایل zip را انتخاب کرده و روی گزینه Open کلیک می کنیم:


920716-a34-IMAG 17.jpg


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


920716-a34-IMAGE 18.jpg

همانطور که می بینیم پروژه با موفقیت وارد اکلیپس شده است. در واقع چنانچه به فولدر مربوط به Workspace هم مراجعه کنیم، خواهیم دید که این پروژه جدید وارد آن فولدر هم شده است:


920716-a34-IMAGE 19.jpg

همانطور که در آموزش اول اشاره شد، یکی از محیط های برنامه نویسی که از آن طریق می توان اقدام به ساخت اپلیکیشن اندروید کرد محیط برنامه نویسی ADT Bundle است که ساختاری شبیه اکلیپس دارد. در واقع نکاتی که پیرامون ذخیره سازی و همچنین Import کردن یک پروژه به داخل اکلیپس که در این آموزش مورد بحث قرار گرفت را نیز می توان در مورد ADT Bundle نیز مورد استفاده قرار داد.

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. فرمتی که می توان با آن پروژه اندروید خود را ذخیره سازیم چیست؟
2. آیا در صورت پاک کردن کامل پروژه از داخل اکلیپس، امکان باز گرداندن آن از داخل Recycle Bin وجود دارد یا خیر؟
3. به چه نحوی می توان یک پروژه را وارد اکلیپس نمود؟

آموزش برنامه نویسی اندروید - قسمت ۳۳: به کار گیری واحد Hexadecimal در تولید رنگ

اهداف آموزشی این قسمت عبارتند از:
1. معرفی روش استفاده از فتوشاپ برای تولید رنگ
2. نحوه استفاده از فتوشاپ برای یافتن Hexadecimal مد نظر
3. نحوه ایجاد یک رنگ بدون نیاز با فتوشاپ و ماشین حساب
4. نحوه خلاصه نویسی یک کد Hexadecimal

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

اگر خاطرمان باشد در آموزش سی و دوم رنگی به مقادیر زیر ایجاد کردیم:

920713-a33-IMAGE 1.jpg

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


920713-a33-IMAGE 2.jpg

از منوی اصلی نرم افزار روی گزینه Window کلیک کرده سپس همانطور که در تصویر فوق مشخص شده است روی گزینه Color کلیک می کنیم(در عوض می توان بدون مراجعه به منوی فوق کلید F6 را فشار داد):


920713-a33-IMAGE 3.jpg

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


920713-a33-IMAGE 4.jpg

پس از انتخاب گزینه Web Color Sliders، گزینه های پنجره Color به گزینه هایی که در کادر قرمز رنگ در تصویر فوق نشان داده شده اند تغییر پیدا خواهند کرد. در مقابل می بینیم که برای هر عدد یک Slider متناظر با R و G و B در نظر گرفته شده است که به ترتیب همان رنگهای قرمز، سبز و آبی هستند. در این پنجره فقط رنگ ها مد نظر قرار داده شده اند و خبری از گزینه آلفا نیست. حال اعداد به دست آمده را به وارد می کنیم:


920713-a33-IMAGE 5.jpg

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


استفاده از فتوشاپ برای یافتن Hexadecimal مد نظر

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


920713-a33-IMAGE 6.jpg

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


920713-a33-IMAGE 7.jpg

همانطور که در تصویر فوق مشاهده می شود، جایگاه دایره که در تصویر قبل با یک دایره قرمز رنگ نشان داده شده بود را با موس خود به پایین انتقال داده ایم. حال می بینیم که مقادیر RGB که در کادر قرمز رنگ قرار دارند تغییر پیدا کرده و بالتبع مقدار Hexadecimal که با یک فلش قرمز رنگ مشخص شده نیز به عدد #578928 تغییر پیدا کرده است. در این تصویر مربعی که پایین آن کلمه Current به معنی "کنونی" نوشته شده است را با عدد 1 و مربعی که بالای آن کلمه New به معنی "جدید" نوشته شده است را با عدد 2 مشخص کرده ایم. به عبارت دیگر مربع شماره یک رنگ قبلی ما بوده است و مربع شماره دو رنگ جدیدی است که ساخته ایم. علاوه بر این، یک Slider که به صورت عمودی در این پنجره قرار گرفته است نیز با یک بیضی قرمز رنگ مشخص شده است که با بالا و پایین بردن آن به طیف های رنگی گوناگونی دست پیدا خواهیم کرد.


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

به طور کلی می توان گفت که 00 معادل با "حداقل رنگ" است و FF معادل با "حداکثر رنگ" می باشد بطوریکه یک عدد Hexadecimal از صفر شروع شده و تا عدد نه ادامه می یابد و پس از عدد نه به جای آنکه عدد ده در نظر گرفته شود حرف A مدنظر قرار داده می شود و به همین ترتیب تا حرف F که معادل با عدد 16 است ادامه می یابد:


920713-a33-IMAGE 8.jpg

برای روشن شدن این مطلب به جدول زیر توجه نمایید:


920713-a33-IMAGE 9.jpg

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


920713-a33-IMAGE 10.jpg

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


نحوه خلاصه نویسی یک کد Hexadecimal

به خاطر داشته باشیم که اگر مقادیر یک کد Hexadecimal برابر یک دیگر بودند می توانیم یکی از آنها را بنویسیم. مثلاً کد رنگ قرمز که در بالا دارای مقدار #FF0000 بود را از آنجا که هر دو رقم مربوط به رنگ قرمز مشابه هستند(هر دو F هستند)، هر دو رقم مربوط به رنگ سبز مشابه هستند(هر دو 0 هستند) و هر دو رقم مربوط به رنگ آبی مشابه هستند(هر دو 0 هستند) می توانیم یک از آنها را نوشته و کد فوق را به صورت خلاصه به شکل #F00 بنویسیم(تفاوتی مابین حروف بزرک و کوچک نیست. در واقع اگر در فتوشاپ با حرف بزرگ چیزی را وارد کنیم به صورت خودکار به حرف کوچک تبدیل خواهد شد).

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. FF در واحد Hexadecimal به چه معنا است؟
2. 00 در واحد Hexadecimal به چه معنا است؟
3. معادل عددی حرف D در بازه شانزده تایی مقادیر Hexadecimal چند است؟
4. به چه نحوی می توان یک کد Hexadecimal کامل را به صورت خلاصه نوشت؟
5. با توجه به چرخه رنگ زیر رنگ های درخواست شده را به صورت ذهنی بسازید؟


920713-a33-IMAGE 11.jpg

الف: کد Hexadecimal رنگ زرد چیست؟
ب: کد Hexadecimal رنگ صورتی روشن چیست؟

آموزش برنامه نویسی اندروید - قسمت ۳۱: نحوه نامگذاری String ها در یک اپلیکیشن

اهداف آموزشی این قسمت عبارتند از:
1. معرفی نحوه نامگذاری String ها در اندروید
2. نحوه حذف، اضافه و ویرایش String ها در یک اپلیکیشن

در آموزش قسمت سی ام تقریباً با ماهیت string ها در اندروید آشنا شدیم. چیزی که در ایجاد string ها از اهمیت بسزایی برخوردار است نحوه نامگذاری آن ها است.

نحوه نامگذاری string ها

رعایت این نکان موجب می گردد تا Error های یک اپلیکیشن را به حداقل برسانیم. در نامگذاری string ها به هیچ وجه نباید از Space یا جای خالی استفاده کنیم:


Hello World, MainActivity!

همانطور که در کد فوق ملاحظه می شود مقابل name پس از علامت مساوی hello world به این صورت نوشته شده است که مابین hello و world یک فاصله قرار گرفته است و همین فاصله موجب می گردد تا اپلیکیشن ما Compile نشود و تا این مشکل رفع نگردد نخواهیم توانست به ادامه کار بپردازیم.

نکته دیگر که در مورد نامگذاری string ها می بایست مد نظر قرار دهیم این است که می توانیم در نامگذاری خود از اعداد هم استفاده کنیم:


Hello World, MainActivity!

همانطور که در کد فوق ملاحظه می شود نام hello1 برای این string در نظر گرفته شده است.

در نامگذاری string ها از _ یا به عبارتی همان Underscore هم می توان استفاده کرد(برای تایپ این علامت می توان با پایین نگه داشتن دکمه Shift دکمه Dash را فشار داد):


Hello World, MainActivity!

همانطور که در کد فوق ملاحظه می شود دو کلمه hello و world با یک _ از یکدیگر در نام hello_world جدا شده اند. در نامگذاری string ها از ساختار cameCase هم به صورت زیر می توان استفاده کرد:


Hello World, MainActivity!

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

به خاطر داشته باشیم که در نامگذاری string ها از Dash به هیچ وجه نمی توانیم استفاده کنیم:


Hello World, MainActivity!

همانطور که در کد فوق ملاحظه می شود دو کلمه hello و world با یک – یا همان Dash از یکدیگر جدا شده اند که اینکار خلاف استاندارد نامگذاری string ها است.

علاوه بر Dash از دیگر علائم همچون @ و # و $ و % و & و غیره به هیچ وجه نمی توان استفاده کرد:


Hello World, MainActivity!
Hello World, MainActivity!
Hello World, MainActivity!
Hello World, MainActivity!
Hello World, MainActivity!

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

در آموزش گذشته با نحوه ایجاد یک string جدید آشنا شدیم. در ادامه قصد داریم تا با نحوه حذف، اضافه و ویرایش یک string بیشتر آشنا شویم:


920702-a31-IMAGE1.jpg

همانطور که در تصویر فوق مشاهده می شود فایل strings.xml را باز نموده و Tab مرتبط با Resources آن را کلیک می کنیم. همانطور که قبلا توضیح داده شد در سمت چپ این پنجره لیستی از string هایی که ایجاد کرده ایم را مشاهده می کنیم. در این تصویر دکمه Remove به معنی "حذف کردن" با یک بیضی قرمز رنگ مشخص شده است. در واقع پس از آنکه یک string را با یک بار کلیک کردن روی آن انتخاب کرده و به رنگ آبی درآمد، می توان روی دکمه Remove کلیک کنیم و آن string را حذف کنیم. نکته ای که در اینجا حائز اهمیت است این است که اگر string یی که قصد داریم آنرا حذف کنیم در جایی در اپلیکیشن ما مورد استفاده قرار گرفته باشد و ما آن را حذف کنیم، بلافاصله پس از Save کردن فایل خود برنامه با مشکل مواجه خواهد شد. از اینرو می بایست مراقب بوده تا string هایی که مورد استفاده نیستند را از این لیست حذف کنیم.

پس از دکمه Remove دو دکمه Up و Down دیده می شوند که به ترتیب "بالا" و "پایین" ترجمه می شوند. کاری که این دو دکمه انجام می دهند این است که جایگاه string انتخاب شده در این لیست را به بالا و پایین انتقال می دهند.

علاوه بر این روش حذف و همچنین روش اضافه کردن یک string که در آموزش قبل توضیح داده شد، می توان با استفاده از روش دیگری هم به حذف، اضافه و حتی ویرایش یک string پرداخت. برای این منظور در پنجره بالا روی Tab مربوط به strings.xml کلیک کرده و پنجره ای به شکل زیر خواهیم دید:


920702-a31-IMAGE2.jpg

همان لیستی که در پنجره قبل داشتیم اکنون به صورت کد قابل مشاهده است. فرض کنیم که در این کد قصد داریم متن مربوط به string مرتبط با hello را از Hello World, MainActivity! به فقط دو کلمه Hello World تغییر دهیم. برای این منظور به سادگی می توانیم بخشی از متن که نمی خواهیم را Delete کرده و فایل خود را Save کنیم:


920702-a31-IMAGE3.jpg

همانطور که در تصویر فوق ملاحظه می شود متن خود را به Hello World تغییر داده ایم. حال مجدد به Tab مرتبط با Resources باز می گردیم:


920702-a31-IMAGE4.jpg

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

مجدد به Tab مرتبط با strings.xml باز گشته این بار قصد داریم تا با کد نویسی یک string جدید ایجاد کنیم:


920702-a31-IMAGE5.jpg

همانطور که در تصویر فوق ملاحظه می شود، یک string جدید تحت عنوان newText به معنی "متن جدید" به صورت دستی کدنویسی کرده ایم و مقدار آن را معادل با متن This is a new text به معنی "این یک متن جدید است" قرار داده ایم. اکنون مجدد روی Tab مرتبط با Resources کلیک کرده و نتیجه را مشاهده می کنیم:


920702-a31-IMAGE6.jpg

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

توجه داشته باشیم که به همین راحتی که در Tab مرتبط با strings.xml می توانیم یک string جدید ایجاد کنیم، به همین آسانی هم می توانیم یک string را پاک کرده و آن را از لیست string ها حذف کنیم.

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:

1. از چه علائمی در نامگذاری یک string نمی توان استفاده کرد؟
2. منظور از اصطلاح camelCase چیست؟
3. چنانچه یک string در جایی از اپلیکیشن مورد استفاده قرار گرفته باشد و آن را از لیست String های اپلیکیشن Delete کنیم چه اتفاقی خواهد افتاد؟

آموزش برنامه نویسی اندروید- قسمت ۳۰: بررسی فایل strings.xml در پوشه values

اهداف آموزشی این قسمت عبارتند از: 1. معرفی فایل strings.xml
2. نحوه ایجاد یک String جدید و اختصاص آن به یک TextView
3. نحوه لینک دادن به یک String
4. نحوه تغییر متن یک TextView بدون نیاز به فایل strings.xml
5. اصطلاح Hardcoding به چه معنا است؟

اگر خاطرمان باشد در آموزش قسمت بیست و نهم کلیه بخش های مرتبط با یک TextView را مورد بررسی قرار دادیم به جزء بخشی که مرتبط با متن داخل آن TextView بود. برای همین منظور کد مرتبط با UI پروژه ای که در قسمت هشتم ایجاد کردیم را باز می نماییم:

    


در تگ مربوط به TextView در خط آخر تگ android:text="@string/hello" را مشاهده می کنیم. به طور کلی می توان گفت که این خط از کد مسئول نمایش دادن نوشته داخل TextView می باشد. اگر خاطرمان باشد نوشته داخل این TextView معادل با Hello World, MainActivity! می باشد اما این در حالی است که در این تگ چیزی به جزء hello نمی بینیم. به منظور روشن شدن این مسئله به پنجره Package Explorer باز می گردیم:


920629-a30-IMAGE1.jpg

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


920629-a30-IMAGE2.jpg

همانطور که در تصویر فوق ملاحظه می شود فلش قرمز زنگ نشان دهنده گزینه ای تحت عنوان hello است و این hello همان hello یی است که در TextView به آن اشاره کردیم. در صورتیکه یک بار روی گزینه hello کلیک کنیم خواهیم دید که به رنگ آبی در خواهد آمد سپس اگر به کادر قرمز رنگ توجه کنیم می بینیم که در بخش Name به معنی "نام" واژه hello نوشته شده و در بخش Value به معنی "مقدار" Hello World, MainAvtivity! نوشته شده است.


نحوه ایجاد یک String جدید و اختصاص آن به یک TextView

در این پنجره دکمه ای تحت عنوان Add به معنی "اضافه کردن" وجود دارد که می توانیم از آن برای ایجاد متون جدید استفاده کنیم. برای روشن شدن این مسئله به ذکر مثالی اکتفا می کنیم. فرض کنیم که می خواهیم به جای Hello World, MainActivity! می خواهیم نام خود را روی صفحه نمایش دهیم. برای این منظور روی دکمه Add کلیک کرده و پنجره ای به شکل زیر خواهیم دید:


920629-a30-IMAGE3.jpg

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


920629-a30-IMAGE4.jpg

همانطور که در تصویر فوق ملاحظه می شود پس از کلیک کردن روی دکمه OK به پنجره قبل بازگشته با این تفاوت که گزینه دیگری همانطور که با یک بیضی قرمز رنگ مشخص شده است تحت عنوان String به لیست اضافه شده است. در بخشی که با یک کادر قرمز رنگ مشخص شده است در بخش Name نامی را برای این String در نظر می گیریم. به طور مثال بنده نام developer به معنی "توسعه دهنده" را تایپ می کنم(توجه داشته باشید که حرف اول این نام با حرف کوچک تایپ شده است).

سپس در بخش Value عبارت I am Behzad Moradi به معنی "من بهزاد مرادی هستم" را تایپ می کنم(فراگیران می توانند نام خود و یا هر چیزی دیگری را تایپ کنند). نکته ای که در اینجا حائز اهمیت است این است که برخلاف بخش Name که در آن می بایست اصول خاصی را برای نامگذاری استفاده کرد و مثلا به هیچ وجه از فاصله استفاده نکرد، در بخش Value هر چیزی را می توانیم وارد کنیم تا جاییکه حتی می توان نام خود را به فارسی بنویسیم:


920629-a30-IMAGE5.jpg

همانطور که در تصویر فوق ملاحظه می شود مقادیر مرتبط با Name و Value وارد شده اند و به محض اینکه فایل خود را از طریق فشردن هم زمان دکمه های Ctrl و S و یا از طریق منوی اصلی گزینه File سپس گزینه Save ذخیره سازیم، خواهیم دید که گزینه جدید که با فلش قرمز رنگ در تصویر قبل تحت عنوان String به لیست اضافه شده بود بلافاصله به نامی که در بخش Name وارد کرده ایم یا در این مثال همان واژه developer تغییر نام می دهد.

در همین مرحله ادامه آموزش در مورد پنجره بالا را متوقف می کنیم چرا که می خواهیم در اولین برنامه اندروید خود نام خود را به نمایش در آوریم. برای این منظور به فایل main.xml رفته و آنرا به صورت زیر ویرایش می کنیم:



    


همانطور که در کد فوق ملاحظه می شود در تگ مربوط به text به جای واژه hello واژه جدیدی که تحت عنوان developer ساختیم را می نویسیم و پس از Save کردن همانطور که قبلا آموزش داده شد اپلیکیشن خود را از طریق Emulator اجرا می کنیم:


920629-a30-IMAGE6.jpg

همانطور که در تصویر فوق که از Emulator گرفته شده است مشاهده می شود عبارت قبلی با عبارتی که برای String جدید خود تحت عنوان developer در نظر گرفتیم یا همان جمله I am Behzad Moradi نمایش داده می شود.

اکنون مجدد به فایل strings.xml باز می گردیم:


920629-a30-IMAGE7.jpg

همانطور که در تصویر فوق ملاحظه می شود در پایین این پنجره یک Tab تحت عنوان Resources به معنی "منابع" و یک Tab دیگر تحت عنوان strings.xml وجود دارد. پیش از آنکه روی Tab مربوط به strings.xml کلیک کنیم توجه مان را به String دیگر تحت عنوان app_name که در لیست دیده می شود جلب می کنیم که در ادامه آموزش به معرفی آن خواهیم پرداخت:


920629-a30-IMAGE8.jpg

به طور کلی می توان گفت که Tab مربوط به strings.xml همان Tab مربوط به Resources است با این تفاوت که به صورت کد نمایش داده می شود. دقیقاً همان سه String یی که در پنجره قبل وجود داشتند با همان نام در این پنجره به شکل کد نمایش داده شده اند.

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



    
    
        
            
                
                
            
        
    


پس از باز کردن فایل AndroidManifest.xml کدی به صورت فوق ملاحظه خواهیم کرد. در تنها تگ مربوط به activity این فایل تگی تحت عنوان android:label وجود دارد که مقدار اختصاص داده شده به آن همین app_name است.


نحوه لینک دادن به یک String

اگر به نحوه لینک دادن String های ایجاد شده مثلاً همین String مرتبط با app_name در کد فوق توجه کرده باشیم، خواهیم دید که اول می بایست یک علامت @ قرار داده سپس کلید واژه string را نوشته و در نهایت پس از قرار دادن یک علامت / نام String مد نظر را می نویسیم که به طور کامل به صورت زیر خواهد بود:


android:label="@string/app_name"

نحوه تغییر متن یک TextView بدون نیاز به فایل strings.xml

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


920629-a30-IMAGE9.jpg

همانطور که در تصویر فوق ملاحظه می شود، کد @string/ را که به اندروید دستور می دهد تا به فایل strings.xml رجوع کند را حذف کرده ایم و مستقیماً عبارت This is a new text! به معنی "این یک متن جدید است!" را وارد می کنیم. حال به محض اینکه فایل خود را Save کنیم همانطور که در تصویر فوق ملاحظه می شود یک علامت اخطار زرد رنگ نمایان خواهد شد. چنانچه نشانگر موس خود را روی آن قرار دهیم، عبارت Hardcoded “This is a new text!”, should use @string resource به معنی " عبارت “This is a new text!” به صورت Hardcoding وارد شده است، شما بایستی از فایل strings استفاده کنید" نشان داده خواهد شد(در ادامه با اصطلاح Hardcoding بیشتر آشنا خواهید شد).

در حقیقت می توان گفت که این نشانگر زرد رنگ یک Warning یا "هشدار" است و به هیچ وجه یک Error یا "خطا" نمی باشد. این هشدار به ما اطلاع می دهد که می بایست متن خود را داخل فایل strings بنویسیم تا چنانچه خواستیم اپلیکیشن خود را برای زبان های مختلف طراحی کنیم با مشکل مواجه نشویم. به سادگی می توان هشدارهایی از این دست را نادیده بگیریم.


آشنایی با اصطلاح Hardcoding

به طور خلاصه در برنامه نویسی زمانیکه اطلاعات در خود Source Code یا همان کد برنامه وارد شوند و این اطلاعات از منابع خارجی مثل strings.xml وارد کد نشوند ما Hardcoding انجام داده ایم. به عبارت دیگر با Hardcoding امکان ویرایش اطلاعات به طور مستقیم از بین خواهد رفت و این مسئله Flexibility یا "انعطاف پذیری" برنامه را کاهش خواهد داد.

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. نحوه ساخت یک String جدید به چه شکل است؟
2. چگونه می توان به یک String در بخش های مختلف یک اپلیکیشن لینک داد؟
3. علاوه بر فایل strings.xml چه راه کار دیگری برای وارد کردن متن به یک اپلیکیشن وجود دارد؟
4. منظور از Hardcoding چیست؟
در آموزش آتی با روش دیگری جهت حذف، اضافه و یا ویرایش یک متن در فایل strings.xml همچنین اصول نامگذاری String ها در اندروید خواهیم پرداخت.

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

اهداف آموزشی این قسمت عبارتند از:
1. معرفی TextView در ساخت یک UI
2. تفاوت مقادیر fill_parent و wrap_content
3. آشنایی با Tab مرتبط با Misc در پنجره Properties

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

برای همین منظور مجدد به پروژه ای که در آموزش هشتم تحت عنوان My First Android Project ایجاد کردیم رجوع می کنیم. پس از باز کردی فایل main.xml که در فولدر layout زیرشاخه res قرار دارد با کد زیر مواجه خواهیم شد:
  1. xml version="1.0" encoding="utf-8"?>
  2. 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. android:layout_width="fill_parent"
  7. android:layout_height="wrap_content"
  8. android:text="@string/hello" >

در آموزش گذشته ساختار کلی کد فوق مورد بررسی قرار گرفت. در این آموزش قصد داریم تا تگ مرتبط با را مورد بررسی قرار دهیم. اگر خاطرمان باشد پس از ساخت این پروژه و اجرای آن روی 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. 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. android:layout_width="200dip"
  7. android:layout_height="48dip"
  8. android:text="@string/hello" >

همانطور که در کد فوق ملاحظه می شود مقادیر 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 است، می بینیم که کادر آبی رنگ کل فضای سیاه صفحه را در برگرفته است(به خاطر داشته باشیم که ما با اینکار فقط اندازه کادر متن را می توانیم تغییر دهیم و با اینکار به هیچ وجه اندازه فونت متن تغییر پیدا نخواهد کرد. در آموزش های آتی به تفصیل پیرامون نحوه تغییر اندازه فونت صحبت خواهیم کرد).

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. تفاوت مقادیر fill_parent و wrap_content چیست؟
2. به جای مقادیر fill_parent و wrap_content از چه واحدی می توان استفاده کرد؟
3. برای تغییر ابعداد یک view در ساخت UI از چند روش می توان استفاده کرد؟
4. چرا با تغییر ابعداد layout_width و layout_height اندازه فونت متن تغییر پیدا نمی کند؟
در آموزش آتی با فایل strings.xml که در داخل فولدر values که زیرشاخه فولدر res است آشنا خواهیم شد.

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

اهداف آموزشی این قسمت عبارتند از:
1. معرفی XML
2. علت به کارگیری XML در توسعه اندروید
3. معرفی اجزای تشکیل دهنده یک layout در اپلیکیشن اندرویدی
4. آشنای با استاندارد UTF-8
5. معرفی namespace
6. نحوه نامگذاری namespace در سیستم عامل اندروید

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

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. 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. android:layout_width="fill_parent"
  7. android:layout_height="wrap_content"
  8. android:text="@string/hello" />

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


  1. 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" >

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


namespace چیست؟

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


  1. ApplesBananas

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

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


  1. Room
  2. 5
  3. 8

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

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


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

اکنون بدون هیچ مشکلی توانستیم دو جدول را با پیشوندهای مجزا با یکدیگر ادغام نموده و هر دو را در کنار یکدیگر بدون هیچ مشکلی قرار دهیم.

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


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

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

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

اکنون که با مفهوم namespace آشنا شدیم مجدد به کد خود نگاهی خواهیم انداخت:


  1. 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" >

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

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

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. علت استفاده از زبان XML در توسعه اندروید چیست؟
2. عدد 8 در عبارت UTF-8 به چه چیزی اشاره دارد؟
3. چرا در توسعه UI از namespace استفاده می کنیم؟
4. آدرس موجود در namespace به کدام سایت اینترنتی اشاره دارد؟
5. فرق مابین fill_parent و match_parent چیست؟
6. چرا در این پروژه ای که ایجاد کرده ایم از مقدار fill_parent استفاده شده است؟

در آموزش آتی با اجزای تشکیل دهنده یک layout آشنا خواهیم شد.

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

اهداف آموزشی این قسمت عبارتند از:
1. بررسی بخش های مختلف کدهای جاوا در یک اپلیکیشن اندروید
2. آشنایی با کلاس های Activity و Bundle
3. آشنایی با متد onCreate

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

برای این منظور پروژه ای که در آموزش هشتم ساختیم را در محیط برنامه نویسی اکلیپس باز نموده و از زیرشاخه پروژه ای که تحت عنوان 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 به آموزش نهم مراجعه نمایید).

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. علت وارد کردن کلاس Activity به یک اپلیکیشن اندرویدی چیست؟
2. اولین متدی که از کلاس Activity در یک اپلیکیشن مورد استفاده قرار می گیرد چیست؟
3. علت استفاده از دستور super چیست؟
4. حرف R به چه چیزی اشاره دارد؟

در آموزش آتی با اجزای تشکیل دهندۀ یک فایل XML آشنا خواهیم شد.

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

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

در آموزش بیست و پنجم با نحوه ایجاد یک Template با تعدادی Guide به منظور ایجاد Padding آشنا شدیم. حال در این آموزش قصد داریم تا آیکان هایی برای انواع صفحه نمایش با Density هایی متفاوت طراحی کنیم.

اگر خاطرمان باشد در آموزش هشتم پروژه خود را 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

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

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. چرا در مورد فولدر drawable-xhdpi نیاز به جایگزین کردن آیکان نبود؟
2. چنانچه در حین طراحی آیکان های شخصی و همچنین جایگزین کردن آنها نرم افزار اکلیپس باز باشد به چه طریقی می توانیم این موضوع را به محیط برنامه نویسی اکلیپس اطلاع دهیم؟

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

اهداف آموزشی این قسمت عبارتند از:
1. آشنایی با محیط فتوشاپ
2. نحوه ایجاد یک 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 ها چاپ نخواهند شد و صرفاً جهت مشخص سازی نقاطی از تصویر می باشند.

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

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. چرا در حین ساخت یک فایل جدید در فتوشاپ به منظور طراحی یک آیکان گزینه Transparent را تیک می زنیم؟
2. هدف از ایجاد Guide ها چیست؟
در آموزش بیست و ششم با نحوه جایگزینی آیکان های جدید در اولین پروژه خود و همچنین تست کردن اپلیکیشن آشنا خواهیم شد.

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

اهداف آموزشی این قسمت عبارتند از:
1. آشنایی با Launcher Icon
2. اهداف به کار گیری Launcher Icon
3. باید ها و نباید ها در طراحی آیکان
4. فرمت و اندازه آیکان برای صفحه نمایش های مختلف
5. علت استفاده از Padding در طراحی آیکان

آشنایی با 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 می باشد.

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. هدف های عمده به کارگیری Launcher Icon در یک اپلیکیشن اندرویدی کدامند؟
2. علت اینکه در طراحی آیکان نباید از طرح های بسیار باریک استفاده کنیم چیست؟
3. برای ساخت یک آیکان از چه فرمت عکسی بایستی استفاده کنیم؟
4. علت استفاده از Padding در طراحی آیکان چیست؟

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

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

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

اهداف آموزشی این قسمت عبارتند از:
1. معرفی بخش های مختلف محیط برنامه نویسی اندروید استودیو

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


اگر خاطرمان باشد در اکلیپس جایی که می توانستیم از آن طریق به پروژه های خود دسترسی پیدا کنیم 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 وجود داشت دست خواهیم یافت که در تصویر فوق با یک بیضی قرمز رنگ نشان داده شده است.

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. ساختار فولدرهای یک پروژه در اندروید استودیو چه تفاوتی با اکلیپس دارد؟
2. مزیت محیط اندروید استودیو نسبت به اکلیپس برای اتصال دستگاه های واقعی چیست؟
3. معادل پنجره Properties اکلیپس در محیط برنامه نویسی اندروید استودیو تحت چه عنوانی شناخته می شوند؟

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

اهداف آموزشی این قسمت عبارتند از:
1. نحوه ساخت ماشین مجازی در اندروید استودیو
2. به کار گیری ماشین های مجازی از پیش تعریف شده

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

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

برای ایجاد یک ابزار 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 را تیک زد.

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

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. چرا زمانیکه یک ماشین مجازی ساخته شده در اندروید استودیو را در اکلیپس ویرایش کنیم، آن ماشین در اندروید استودیو از کار خواهد افتاد؟
2. مزیت استفاده از ماشین های مجازی از پیش تعریف شده چیست؟
3. کاربرد GPU در اندروید استودیو چیست؟

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

اهداف آموزشی این قسمت عبارتند از:
1. چرا بایستی توسعه اپلیکیشن با اندروید استودیو را یاد بگیریم.
2. چرا نمی بایست در توسعه اندروید روی اندروید استودیو تمرکز کنیم.
3. روشی به منظور ارتقاء سرعت اجرای اندروید استودیو

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

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

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

در این قسمت قصد داریم تا به مزایای محیط برنامه نویسی اندروید استودیو اشاره ای داشته باشیم. اندروید استودیو رایگان است و برای دانلود و شروع کار با آن هیچ هزینه ای نیاز نیست بپردازیم(اگر چه که در اینجا حتی فتوشاپ هم رایگان است اما اندروید استودیو واقعاً رایگان است). یکی از مزیت های اندروید استودیو بر محیط برنامه نویسی اکلیپس این است که نیازی نیست تا 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 کلیک کنیم. در نهایت با اینکار احتمال می رود که سرعت اجرای اپلیکیشن ها در اندروید استودیو مقداری افزایش یابد.

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

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. مزیت اکلیپس بر اندروید استودیو چیست؟
2. چرا سرعت اجرای اپلیکیشن در اندروید استودیو تا حدودی پایین است؟
3. به چه شکل می توان این سرعت را تا حدودی ارتقاء بخشید؟

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

اهداف آموزشی این قسمت عبارتند از:
1. معرفی Perspective در محیط اکلیپس
2. باز کردن پنجره های مورد نیاز برای توسعه اندروید
3. ساخت یک Perspective به نام خود

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

معرفی 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 کنیم. در قسمت های آتی با نحوه انجام این کار بیشتر آشنا خواهیم شد).

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

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. منظور از Perspective در محیط اکلیپس چیست؟
2. به چه شکل می توان یک Perspective شخصی ساخت؟
3. به چه شکل می توان تغییرات بوجود آمده در یک Perspective را به حالت اولیه در آورد؟


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

اهداف آموزشی این قسمت عبارتند از:
1. نقاط ضعف یک ماشین مجازی
2. نقطه قوت یک دستگاه مجازی
3. آشنایی با تنظیمات تلفن همراه برای تست کردن اپلیکیشن روی آن
2. اتصال تلفن همراه به سیستم و شناساندن آن به اکلیپس

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

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

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

از نقاط ضعف یک ماشین مجازی می توان به صرف زمان نسبتاً طولانی برای ساخت آن برای اولین بار(این زمان بسته به سخت افزار کامپیوتر یا لپ تاپ می تواند متغیر باشد ولی معمولاً چیزی در حدود 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 با لوگوی معروف گوگل در کنار دیگر اپلیکیشن ها قرار گرفته است.

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

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. نقاط ضعف و قوت استفاده از یک ماشین مجازی برای توسعه اندروید کدامند؟
2. برای اتصال یک دستگاه واقعی به سیستم چند سری تنظیمات می بایست انجام داد؟
3. به چه شکل می توان تنظیم کرد که اکلیپس به صورت خودکار دستگاه واقعی را برای اجرای اپلیکیشن در نظر بگیرد؟

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

اهداف آموزشی این قسمت عبارتند از:
1. نحوه اجرای ماشین مجازی اندروید یا همان AVD
2. تاریخچه عبارت Hello World

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

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

در آموزش قسمت هفدهم مشاهده کردیم که پس از ساخت یک 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! باشد به عنوان یک استاندارد در آمد که ما هم از این قاعده مستثنی نخواهیم بود!

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

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. برای بالا بردن سرعت اجرای Emulator در اجراهای آینده چه راه کاری پیشنهاد می شود؟
2. چگونه می توان در محیط برنامه نویسی اکلیپیس یک پروژه را در Emulator اجرا نمود؟
3. چرا در دنیا رسم است که اولین پروژه برنامه نویسی که می خواهند تست کنند از عبارت Hello World استفاده می کنند؟

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

اهداف آموزشی این قسمت عبارتند از:
1. معرفی رویکردهای تست کردن اپلیکیشن
2. تفاوت مابین Emulator و Simulator
3. چرا در توسعه اپلیکیشن اندرویدی از Emulator استفاده می کنیم
4. نحوه ساخت Emulator در محیط اکلیپس

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

تست کردن اپلیکیشن در پروسه طراحی اپلیکیشن راهی است که از آن طریق می توان از اشتباهات فاحش در برنامه نویسی اندروید جلوگیری به عمل آورد. به عبارت دیگر پس از هر بار اضافه کردن کدی به اپلیکیشن خود نیاز است که اپلیکیشن را یک بار تست کرده تا اطمینان حاصل کنیم که اپلیکیشن 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 می توان این ماشین مجازی را حذف نماییم(لازم به ذکر است در صورت حذف یک ماشین مجازی دیگر به هیچ وجه امکان دسترسی به آن وجود نخواهد داشت).

در آموزش بعد خواهیم دید که به چه نحوه می توان برنامه خود را روی این ابزار تست کرد.

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:
1. تفاوت مابین Emulator و Simulator چیست؟
2. چرا در توسعه اندروید از Emulator استفاده می کنیم؟
3. چرا در ساخت Emulator بایستی تیک Snapshot را فراموش نکنیم؟
4. روش نامگذاری یا همان Naming Convention برای Emulator ها چگونه است؟
5. در با انتخاب عددی مثل 1000 برای SD Card نرم افزار هنگ کرد چه راه کاری را می توان دنبال نمود؟