در قسمت سی ام آموزش اندروید نکته دیگری در رابطه با شی TimePicker در آموزش قبل و همچنین شی DatePicker را مفصل آموزش داده ایم.
گرچه میتوان ابزار TimePicker را در اکتیویتی نمایش داد اما توصیه میشود این ابزار و ابزارهای مشابه را در پنجره دیالوگ نمایش داد چون استفاده از این ابزار تنها مدت کوتاهی را میطلبد و میتواند دیگر فضای اضافی را اشغال نکند.
برای استفاده از پنجره دیالوگ تنها کافی است در فایل جاوا برنامه چنین تغییراتی ایجاد کنیم
package com.example.view4prj; import android.os.Bundle; import android.app.Activity; import android.view.View; import android.widget.Toast; import android.widget.TimePicker; import java.text.SimpleDateFormat; import java.util.Date; import android.app.TimePickerDialog; import android.app.Dialog; public class MainActivity extends Activity { TimePicker tp; int hour, minute; static final int TIME_DIALOG_ID = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tp= (TimePicker)findViewById(R.id.timePicker); tp.setIs24HourView(true); showDialog(TIME_DIALOG_ID); } @Override protected Dialog onCreateDialog(int id) { switch (id) { case TIME_DIALOG_ID: return new TimePickerDialog(this,mTimeSetListener , hour, minute, false); } return null; } private TimePickerDialog.OnTimeSetListener mTimeSetListener= new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourofday, int minuteofhour) { hour=hourofday; minute=minuteofhour; SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm aa"); Date date= new Date(0,0,0,hour,minute); String strDate = timeFormat.format(date); Toast.makeText(getBaseContext(), "you have selected" + strDate, Toast.LENGTH_SHORT).show(); } }; public void onClick(View view) { Toast.makeText(getBaseContext(), "Time Selected: " + tp.getCurrentHour() + ":" + tp.getCurrentMinute(), Toast.LENGTH_SHORT).show(); } }
سپس برنامه را اجرا کرده نتیجه مشابه نتیجه زیر مشاهده کنید که پس از تنظیم زمان و فشردن دکمه set پیغام تعیین شده توسط Toast را مشاهده میکنید
برای نمایش یک پنجره دیالوگ از متد showDialog() (در رابطه با این متد در آموزش های قبل مفصل توضیح داده شده)استفاده میکنیم بدین صورت که ای دی دیالوگ را به آن ارسال میکنیم
showDialog(TIME_DIALOG_ID);
وقتی متد showDialog() فراخوانی گردد به دنبال آن متد ()onCreateDialog نیز اجرا میگردد
@Override protected Dialog onCreateDialog(int id) { switch (id) { case TIME_DIALOG_ID: return new TimePickerDialog(this,mTimeSetListener , hour, minute, false); } return null; }
در اینجا یک شی جدید از کلاس TimePickerDialog ایجاد شده وcontext کنونی(این مبحث را در ادامه آموزش ها مفصل آموزش خواهیم داد) و مقدار اولیه ساعت و دقیقه را به آن ارسال میکنیم.
وقتی که کاربر دکمه set در پنجره دیالوگ را فشرد متد TimeSet() فراخوانی میگردد
private TimePickerDialog.OnTimeSetListener mTimeSetListener= new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourofday, int minuteofhour) { hour=hourofday; minute=minuteofhour; SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm aa"); Date date= new Date(0,0,0,hour,minute); String strDate = timeFormat.format(date); Toast.makeText(getBaseContext(), "you have selected" + strDate, Toast.LENGTH_SHORT).show(); } }; public void onClick(View view) { Toast.makeText(getBaseContext(), "Time Selected: " + tp.getCurrentHour() + ":" + tp.getCurrentMinute(), Toast.LENGTH_SHORT).show(); } }
در اینجا متد ()TimeSet حاوی ساعت و دقیقه ای است که کاربر وارد نموده و از طریق آرگومان های hourofday و minuteofhour تنظیم شده.
یکی دیگر از ابرارهای نمایش که شباهت زیادی به TimePicker دارد ابزار DatePicker است.با استفاده از این ابزار امکان انتخاب تاریخ را خواهید داشت.به تمرین زیر دقت کنید.
تمرین را در پروژه آموزش قبل پیاده سازی میکنیم(View4Prj)بدین صورت که در فایل activity-man.xml یک ابزار DatePicker مطابق دستورات زیر اضافه میکنیم
<DatePicker android:id="@+id/datePicker" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/timePicker" />
حال در فایل MainActivity.java نیز قسمت های پررنگ شده زیر را اضافه میکنیم
package net.learn2develop.BasicViews4; import java.util.Calendar; import android.app.Activity; import android.app.DatePickerDialog; import android.app.Dialog; import android.os.Bundle; import android.view.View; import android.widget.DatePicker; import android.widget.TimePicker; import android.widget.Toast; public class BasicViews4Activity extends Activity { TimePicker timePicker; DatePicker datePicker; int yr, month, day; static final int DATE_DIALOG_ID = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // showDialog(TIME_DIALOG_ID); datePicker = (DatePicker) findViewById(R.id.datePicker); //---get the current date--- Calendar today = Calendar.getInstance(); yr = today.get(Calendar.YEAR); month = today.get(Calendar.MONTH); day = today.get(Calendar.DAY_OF_MONTH); } private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { public void onDateSet( DatePicker view, int year, int monthOfYear, int dayOfMonth) { yr = year; month = monthOfYear; day = dayOfMonth; Toast.makeText(getBaseContext(), "You have selected : " + (month + 1) + "/" + day + "/" + year, Toast.LENGTH_SHORT).show(); } }; public void onClick(View view) { Toast.makeText(getBaseContext(), "Date selected:" + (datePicker.getMonth() + 1) + "/" + datePicker.getDayOfMonth() + "/" + datePicker.getYear() + "\n",Toast.LENGTH_SHORT).show(); } }
حال برنامه را اجرا کرده و تاریخ را تنظیم میکنیم و دکمه موجود را کلیک میکنیم ودر نتیجه تاریخ تنظیم شده به صورت پیغام Toast به شما نمایش داده خواهد شد.
دقیقا مثل ابزار TimePicker ابتدا شئی از نوع DatePicker ایجاد کرده و متدهای ()getMonth() , getYear() , getDay را برای دریافت روز و ماه و سال فراخوانی میکنیم
"Date Selected: " + (dp.getMonth() + 1) + "/" + dp.getDayOfMonth() + "/" + dp.getYear()
و در رویداد onClick مربوط به ابزار Button پیغام Toast که حاوی ماه و سال و روزی میباشد که کاربر تعیین کرده که البته با متدهای ()getMonth() , getDayofMonth ,()getYear بدست آمده اند نمایش داده میشود
Toast.makeText(getBaseContext(), "Date selected:" + (datePicker.getMonth() + 1) + "/" + datePicker.getDayOfMonth() + "/" + datePicker.getYear() + "\n",Toast.LENGTH_SHORT).show();
دقت کنید که متد ()getMonth مقدار ۰ را برای ژانویه (اولین ماه میلادی) نمایش میدهد پس تنها کافیست یک مقدار به این متد اضافه کنیم
(dp.getMonth() + 1)
این ابزار را نیز میتوان در پنجره دیالوگ نمایش داد.
برای نمایش این ابزار در پنجره دیالوگ تنها کافی است مانند شی TimePicker تغییراتی در فایل جاوا بوجود آوریم
package net.learn2develop.BasicViews4; import java.util.Calendar; import android.app.Activity; import android.app.DatePickerDialog; import android.app.Dialog; import android.os.Bundle; import android.view.View; import android.widget.DatePicker; import android.widget.TimePicker; import android.widget.Toast; public class BasicViews4Activity extends Activity { TimePicker timePicker; DatePicker datePicker; int yr, month, day; static final int DATE_DIALOG_ID = 1; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // showDialog(TIME_DIALOG_ID); datePicker = (DatePicker) findViewById(R.id.datePicker); //---get the current date--- Calendar today = Calendar.getInstance(); yr = today.get(Calendar.YEAR); month = today.get(Calendar.MONTH); day = today.get(Calendar.DAY_OF_MONTH); showDialog(DATE_DIALOG_ID); } @Override protected Dialog onCreateDialog(int id) { switch (id) { case DATE_DIALOG_ID: return new DatePickerDialog( this, mDateSetListener, yr, month, day); } return null; } private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { public void onDateSet( DatePicker view, int year, int monthOfYear, int dayOfMonth) { yr = year; month = monthOfYear; day = dayOfMonth; Toast.makeText(getBaseContext(), "You have selected : " + (month + 1) + "/" + day + "/" + year, Toast.LENGTH_SHORT).show(); } }; public void onClick(View view) { Toast.makeText(getBaseContext(), "Date selected:" + (datePicker.getMonth() + 1) + "/" + datePicker.getDayOfMonth() + "/" + datePicker.getYear() + "\n",Toast.LENGTH_SHORT).show(); } }
پس از اجرا پنجره دیالوگ تاریخ را مطابق تصویر زیر خواهید دید پس از تنظیم تاریخ فشردن دکمه Done پیغام Toast مبنی بر تاریخ انتخابی را مشاهده خواهید کرد
ابزار نمایش DatePicker نیز کاملا مشابه TimePicker عمل خواهد کرد بدین صورت که وقتی تاریخ انتخاب میشود متد ()onDateSet فراخوانی میگردد و اینجا همانجایی است که باید تاریخ تنظیم گردد
@Override public void onDateSet(DatePicker view, int yr, int monthofyear, int dayofmonth) { year=yr; month=dayofmonth; day=dayofmonth; Toast.makeText(getBaseContext(), "you have selected : " + (month +1) + "/" + day +"/" + yr, Toast.LENGTH_SHORT).show(); }
دقت کنید که قبل از نمایش دیالوگ باید سه متغیر year,month,day را مقداردهی اولیه کنید
//--get the current date-- Calendar today= Calendar.getInstance(); year=today.get(year); month=today.get(month); day= today.get(day); showDialog(DATE_DIALOG_ID);