خب این تقویمی که توی این سایت گذاشته باید نسخه sdk شما حداقل 11 باشه. یادتون باشه ما api8 گذاشته بودیم. پس الان باید بیایم و نسخه api پروژمون رو تغییر بدیم. خیلی هم خوب چون اینطوری یاد میگیرید که از کجا اینکار رو انجام بدید.
قدم اول: نصب یه ورژن api بالای 11. میتونید برای اینکار از همون pdf که دادم استفاده کنید
قدم دوم: تغییر ورژن android sdk در پروژتون. برای اینکار از بالا سمت راست intellij ایکون زیر رو انتخاب کنید:
قدم اول: نصب یه ورژن api بالای 11. میتونید برای اینکار از همون pdf که دادم استفاده کنید
قدم دوم: تغییر ورژن android sdk در پروژتون. برای اینکار از بالا سمت راست intellij ایکون زیر رو انتخاب کنید:
قدم سوم: اضافه کردن تقویم.
برای اینکار دو راه نوشته شده. من راه دوم رو میرم. (راه اول رو با برنامه اکیلیپس نوشتن)
خب راه دوم رو هم باید با کمی تغییر بریم.
داخل لینک زیر بشید و از سمت راست با زدن Download Zip سورس تقویم رو دانلود کنید
https://github.com/alibehzadian/PersianDatePicker
پس از دانلود مراحل زیر رو با دقت انجام بدید:
برای اینکار دو راه نوشته شده. من راه دوم رو میرم. (راه اول رو با برنامه اکیلیپس نوشتن)
خب راه دوم رو هم باید با کمی تغییر بریم.
داخل لینک زیر بشید و از سمت راست با زدن Download Zip سورس تقویم رو دانلود کنید
https://github.com/alibehzadian/PersianDatePicker
پس از دانلود مراحل زیر رو با دقت انجام بدید:
1⃣داخل پوشه src از سورسی که دانلود کردید بشید. یک پوشه به نام ir هست. اون رو کپی کنید. حالا برید توی محلی که پروژه خودتون رو ساختید. داخل پوشه src پروژتون چیزی که کپی کردید رو paste کنید.
2⃣از فایلی که دانلود کردید وارد پوشه Res و سپس layout بشید. sl_persian_date_picker.xml رو کپی کرده و بعد وارد پوشه پروژه خودتون شده و در مسیر مشابه اون رو paste کنید.
3⃣از داخل intellij در پروژه خودتون داخل پوشه res روی پوشه values راست کلیک کنید، سپس new و سپس Values resource file رو بزنید و نام اون رو بذارید attrs . یک فایل xml برای شما ساخته میشه.
داخل اون شده و بین رو تگ <resources> این رو قرار بدید:
2⃣از فایلی که دانلود کردید وارد پوشه Res و سپس layout بشید. sl_persian_date_picker.xml رو کپی کرده و بعد وارد پوشه پروژه خودتون شده و در مسیر مشابه اون رو paste کنید.
3⃣از داخل intellij در پروژه خودتون داخل پوشه res روی پوشه values راست کلیک کنید، سپس new و سپس Values resource file رو بزنید و نام اون رو بذارید attrs . یک فایل xml برای شما ساخته میشه.
داخل اون شده و بین رو تگ <resources> این رو قرار بدید:
<declare-styleable name="PersianDatePicker">
<attr name="minYear" format="integer" />
<attr name="maxYear" format="integer" />
<attr name="selectedYear" format="integer" />
<attr name="selectedMonth" format="integer" />
<attr name="selectedDay" format="integer" />
<attr name="displayMonthNames" format="boolean" />
<attr name="yearRange" format="integer" />
</declare-styleable>
خب حالا یدور پروژه رو بزنید Run بشه. اگه از کلاس PersianDatePicker از کده زیر ایراد گرفت اون رو پاک کنید:
تموم شد. حالا وقتشه اضافش کنید به پروژتون.
displayDenoscription = a.getBoolean(R.styleable., false);
if( displayDenoscription ) {
denoscriptionTextView.setVisibility(View.VISIBLE);
}
تموم شد. حالا وقتشه اضافش کنید به پروژتون.
بیشتر هدف من این بود یاد بگیرید چطور یک سورس رو به پروژتون اضافه کنید. توی اینترنت سورس کدهای زیادی هست. خیلی هاش هم داخل همین سایت github قرار داده میشن.
البته روش دیگه این هست که یک کتابخانه اضافه کنید به پروژه خودتون. در آینده این رو هم تست میکنیم با کتابخانه های دیگه
برای اینکه از این تقویم استفاده کنید کافیه برید داخل همون layout مربوط به ثبت نام دوستانتون. مثلا من اسمش رو قرار داده بودم add_person. خب کده زیر رو بزنید:
البته روش دیگه این هست که یک کتابخانه اضافه کنید به پروژه خودتون. در آینده این رو هم تست میکنیم با کتابخانه های دیگه
برای اینکه از این تقویم استفاده کنید کافیه برید داخل همون layout مربوط به ثبت نام دوستانتون. مثلا من اسمش رو قرار داده بودم add_person. خب کده زیر رو بزنید:
<ir.smartlab.persindatepicker.PersianDatePicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="40px"
android:id="@+id/calender"
app:displayMonthNames="true"/>
این کد رو در انتخای سایر تگها اضافه کنید یا هرجا میخواید
صفتها رو که میشناسید. این تقویم خودش به تنهایی یک سری صفتهای جدید داره. مثلا displayMonthName برای این هست که در ماه ها به جای عدد اسامی ماه ها رو بگه.
یا selected year، selected month و selected year برای این هست که بصورت دیفالت چه تاریخی انتخاب شود در غیر اینصورت تاریخ روز نمایش داده میشود. همچنین با min Year و Max Year میتونید رنج زمانی رو تعیین کنید.
زمانی که به بحث ذخیره سازی در SQLITE رسیدیم با کدنویسی این تقویم اشنا میشید.
برای اینکه یک عنوان بذارم برای تقویم از تگ زیر استفاده کردم در بالای تگ تقویم (layout ما linear است):
صفتها رو که میشناسید. این تقویم خودش به تنهایی یک سری صفتهای جدید داره. مثلا displayMonthName برای این هست که در ماه ها به جای عدد اسامی ماه ها رو بگه.
یا selected year، selected month و selected year برای این هست که بصورت دیفالت چه تاریخی انتخاب شود در غیر اینصورت تاریخ روز نمایش داده میشود. همچنین با min Year و Max Year میتونید رنج زمانی رو تعیین کنید.
زمانی که به بحث ذخیره سازی در SQLITE رسیدیم با کدنویسی این تقویم اشنا میشید.
برای اینکه یک عنوان بذارم برای تقویم از تگ زیر استفاده کردم در بالای تگ تقویم (layout ما linear است):
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="right"
android:text="تاریخ تولد"
android:textSize="30sp"
android:layout_marginTop="20dp"
/>
🔴کار با اینترنت
همونطور که اول آموزش گفتم در این جلسه قصد دارم یک مبحث مهم رو برای شما شروع کنم. با هدفه اینکه در کنار دکمه های ارسال پیامک و تماس دکمه ارسال ایمیل هم بذاریم.
خب میتونید یک پروژه مجزا باز کنید (یا داخل پروژه فعلی یک صفحه و اکتیویتی دیگه تعریف کنید) تا یک سری کد رو تست کنیم
1)باز کردن یک صفحه اینترنت:
بطور مثال من در یک پروژه که فایل اون رو در اختیارتون میگذارم، یک دکمه به نام button ایجاد کردم. میخوام این دکمه هنگامی که زده شد یک صفحه اینترنتی باز بشه
همونطور که اول آموزش گفتم در این جلسه قصد دارم یک مبحث مهم رو برای شما شروع کنم. با هدفه اینکه در کنار دکمه های ارسال پیامک و تماس دکمه ارسال ایمیل هم بذاریم.
خب میتونید یک پروژه مجزا باز کنید (یا داخل پروژه فعلی یک صفحه و اکتیویتی دیگه تعریف کنید) تا یک سری کد رو تست کنیم
1)باز کردن یک صفحه اینترنت:
بطور مثال من در یک پروژه که فایل اون رو در اختیارتون میگذارم، یک دکمه به نام button ایجاد کردم. میخوام این دکمه هنگامی که زده شد یک صفحه اینترنتی باز بشه
خب به ادامه کار برسیم. در ابتدا میخواهیم متصل بودن دستگاه به اینترنت رو بررسی کنیم:
❄️❄️❄️❄️❄️❄️❄️❄️
1-1)بررسی اتصال به اینترنت
برای انجام هرکار با اینترنت جهت جلوگیری از خطاهای احتمالی ابتدا باید بررسی کنیم ایا دستگاه به اینترنت متصل هست یا نه. پس در اکتیویتی در ابتدا دو کد زیر رو بنویسید.
Context myContext =this;
ConnectivityManager connectMngr = myContext.getSystemService(Context.CONNECTIVITY_SERVICE);
خب برای فهم کد بالا خیلی ساده بهش نگاه میکنیم. ابتدا Context تعریف کردیم و همانطور که قبلا گفتم این کلاس میشه گفت وضعیت کنونی رو به ما برمیگردونه. یک نمونه ازش گرفتم و مقدار اولیه اون رو برابر null گذاشتم.
بعد از آن از کلاس ConnectivityManager استفاده کردم. این کلاس مدیریتی از اتصالات دستگاه رو به ما میده. یک نمونه ازش گرفتم. برای مقدار دهی دقیقا این رو گفتم: "از وضعیت کنونی دستگاه، سرویس Connectivity رو از وضعیت دستگاه گرفته و اون رو بعنوان یک سیستم سرویس به من بده"
متد getSystemService، یک متد از context هست که یک ورودی میگیره و در نهایت با توجه به ورودی که بهش میدیم به ما اون سرویس رومیده. توجه کنید که خروجی این متد از نوع Object هست. پس باید از Cast کردن استفاده کنیم تا بتونیم مقدارش رو در connectMngr ذخیره کنیم:
ConnectivityManager connectMngr = (ConnectivityManager) myContext.getSystemService(Context.CONNECTIVITY_SERVICE);
❄️❄️❄️❄️❄️❄️❄️❄️
1-1)بررسی اتصال به اینترنت
برای انجام هرکار با اینترنت جهت جلوگیری از خطاهای احتمالی ابتدا باید بررسی کنیم ایا دستگاه به اینترنت متصل هست یا نه. پس در اکتیویتی در ابتدا دو کد زیر رو بنویسید.
Context myContext =this;
ConnectivityManager connectMngr = myContext.getSystemService(Context.CONNECTIVITY_SERVICE);
خب برای فهم کد بالا خیلی ساده بهش نگاه میکنیم. ابتدا Context تعریف کردیم و همانطور که قبلا گفتم این کلاس میشه گفت وضعیت کنونی رو به ما برمیگردونه. یک نمونه ازش گرفتم و مقدار اولیه اون رو برابر null گذاشتم.
بعد از آن از کلاس ConnectivityManager استفاده کردم. این کلاس مدیریتی از اتصالات دستگاه رو به ما میده. یک نمونه ازش گرفتم. برای مقدار دهی دقیقا این رو گفتم: "از وضعیت کنونی دستگاه، سرویس Connectivity رو از وضعیت دستگاه گرفته و اون رو بعنوان یک سیستم سرویس به من بده"
متد getSystemService، یک متد از context هست که یک ورودی میگیره و در نهایت با توجه به ورودی که بهش میدیم به ما اون سرویس رومیده. توجه کنید که خروجی این متد از نوع Object هست. پس باید از Cast کردن استفاده کنیم تا بتونیم مقدارش رو در connectMngr ذخیره کنیم:
ConnectivityManager connectMngr = (ConnectivityManager) myContext.getSystemService(Context.CONNECTIVITY_SERVICE);
خب تا الان ما تمام سرویس های Connect رو داخل connectMngr داریم. اما ما تنها الان اطلاعاتی از شبکه رو لازم داریم. که به این میگند NetworkInfo. پس کافیه کد زیر رو بنویسید تا از connectMngr اطلاعات شبکه رو گرفته و داخل یک شی از NetworkInfo ذخیره کنه:
NetworkInfo netInfo = connectMngr.getActiveNetworkInfo();
خب حالا برای بررسی شرط اتصال به اینترنت داخل متد Onclick کد زیر رو بنویسید:
if(netInfo == null || netInfo.isAvailable() == false || netInfo.isConnected() == false){
Toast.makeText(getApplicationContext(),"No Internet!",Toast.LENGTH_LONG);
}
اول از همه جهت یاداوری دوستان جهت بررسی یک شرط در جاوا (بیس اندروید) از if استفاده میکنیم.
If(some condition)
{ Do something }
جهت بررسی یک شرط در جاوا از if استفاده میکنیم و شرط مورد نظر داخل پرانتز قرار داده میشود. سپس بررسی میکنیم اگر شرطی برقرار است کارهای مورد نظر ما داخل {} نوشته میشود.
شرطهایی که بررسی کردیم
1)netInfo == null : اگر هیچ شبکه ای موجور نیست.
2)netInfo.isAvailable() == false: یعنی اگر شبکه فعال نیست
3)netInfo.isConnected() == false: یعنی اگر شبکه متصل نیست
این نکته رو هم بگم که در شرط ها اگر بین چند شرط "یا" برقرار بود یعنی در نظر داشتیم یکی از شرطها هم حتی اگر برقرار بود عملیات ما انجام شود، بین آنها علامت || میگذاریم.
همچنین اگر مورد نظر ما بود که تمام شرطها حتما برقرار باشند همزمان تا کاری را انجام دهیم، بین آنها && میگذاریم.
در اخر اینکه در بررسی شرطها علامت تساوی (آیا مساوی بودن!؟)
بصورت == قرار داده میشود
NetworkInfo netInfo = connectMngr.getActiveNetworkInfo();
خب حالا برای بررسی شرط اتصال به اینترنت داخل متد Onclick کد زیر رو بنویسید:
if(netInfo == null || netInfo.isAvailable() == false || netInfo.isConnected() == false){
Toast.makeText(getApplicationContext(),"No Internet!",Toast.LENGTH_LONG);
}
اول از همه جهت یاداوری دوستان جهت بررسی یک شرط در جاوا (بیس اندروید) از if استفاده میکنیم.
If(some condition)
{ Do something }
جهت بررسی یک شرط در جاوا از if استفاده میکنیم و شرط مورد نظر داخل پرانتز قرار داده میشود. سپس بررسی میکنیم اگر شرطی برقرار است کارهای مورد نظر ما داخل {} نوشته میشود.
شرطهایی که بررسی کردیم
1)netInfo == null : اگر هیچ شبکه ای موجور نیست.
2)netInfo.isAvailable() == false: یعنی اگر شبکه فعال نیست
3)netInfo.isConnected() == false: یعنی اگر شبکه متصل نیست
این نکته رو هم بگم که در شرط ها اگر بین چند شرط "یا" برقرار بود یعنی در نظر داشتیم یکی از شرطها هم حتی اگر برقرار بود عملیات ما انجام شود، بین آنها علامت || میگذاریم.
همچنین اگر مورد نظر ما بود که تمام شرطها حتما برقرار باشند همزمان تا کاری را انجام دهیم، بین آنها && میگذاریم.
در اخر اینکه در بررسی شرطها علامت تساوی (آیا مساوی بودن!؟)
بصورت == قرار داده میشود
خب حالا بعد از بررسی شرط ها میخواهیم بگیم اگر یکی از اینها هم برقرار بود یعنی اینترنت متصل نیست، پس پیامی رو به کاربر نشون دادیم.
خب درغیر اینصورت اینترنت وصل هست پس میشه صفحه اینترنت رو باز کنیم.
حالا کد زیر رو اضافه کنید:
else {
Toast.makeText(getApplicationContext(),"You are Connectedd",Toast.LENGTH_LONG);
}
زمانی که شرطی رو بررسی میکنیم و میخوایم بگیم اگر if مطرح شده برقرار نبود در غیر اینصورت چکاری انجام بده، از else استفاده میکنیم.
فعلا داخل else نوشتم یک پیام نشون بده که به اینترنت متصل هستید.
خب درغیر اینصورت اینترنت وصل هست پس میشه صفحه اینترنت رو باز کنیم.
حالا کد زیر رو اضافه کنید:
else {
Toast.makeText(getApplicationContext(),"You are Connectedd",Toast.LENGTH_LONG);
}
زمانی که شرطی رو بررسی میکنیم و میخوایم بگیم اگر if مطرح شده برقرار نبود در غیر اینصورت چکاری انجام بده، از else استفاده میکنیم.
فعلا داخل else نوشتم یک پیام نشون بده که به اینترنت متصل هستید.
❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️
2-1) تنها چیزی که نباید فراموش بشود اجازه گرفتن از کاربر هست. که میخواهیم از اینترنت اون فرد استفاده کنیم. این permission ها رو در manifest قرار بدید.
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
کافی هست از برنامتون اجرا بگیرید و تست کنید.
❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️
1-3)حالا در این مرحله باید داخل else صفحه مورد نظر را باز کنیم. اگر به یاد داشته باشید intent ها درخواست ما از اندروید بودند. درحال حاضر ما درخواست باز کردن یک صفحه وب رو داریم. از کد زیر استفاده میکنیم:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(intent);
این نوع خاصی از intent هست. ورودی اول نوعش رو مشخص کرده و ورودی دوم یک متد هست به نام Parse. این متد در کلاس Uri قرار دارد. یک ورودی رشته ای (string) گرفته و اون رو تبدیل به یک uri معتبر میکند. در اخر هم Intent خود رو اجرا کردیم.
2-1) تنها چیزی که نباید فراموش بشود اجازه گرفتن از کاربر هست. که میخواهیم از اینترنت اون فرد استفاده کنیم. این permission ها رو در manifest قرار بدید.
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
کافی هست از برنامتون اجرا بگیرید و تست کنید.
❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️
1-3)حالا در این مرحله باید داخل else صفحه مورد نظر را باز کنیم. اگر به یاد داشته باشید intent ها درخواست ما از اندروید بودند. درحال حاضر ما درخواست باز کردن یک صفحه وب رو داریم. از کد زیر استفاده میکنیم:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(intent);
این نوع خاصی از intent هست. ورودی اول نوعش رو مشخص کرده و ورودی دوم یک متد هست به نام Parse. این متد در کلاس Uri قرار دارد. یک ورودی رشته ای (string) گرفته و اون رو تبدیل به یک uri معتبر میکند. در اخر هم Intent خود رو اجرا کردیم.
دوستان امیدوارم این جلسه مطالب مفید بوده باشه
در جلسه اینده به ادامه بحث اینترنت میپردازیم. به استفاده از webView و یک سری کاربردهاش
همچنین ارسال ایمیل
توصیه میکنم خودتون یک بررسی بکنید و تلاش بکنید در این دو موضوع. پس جستجو در اینترنت و استفاده از وبسایتی مثل
stackoverflow.com
فراموش نشود.😄
خسته نباشید✌🏻
در جلسه اینده به ادامه بحث اینترنت میپردازیم. به استفاده از webView و یک سری کاربردهاش
همچنین ارسال ایمیل
توصیه میکنم خودتون یک بررسی بکنید و تلاش بکنید در این دو موضوع. پس جستجو در اینترنت و استفاده از وبسایتی مثل
stackoverflow.com
فراموش نشود.😄
خسته نباشید✌🏻