Bài 20: DatePickerDialog và TimePickerDialog trong Android (P1)

1 comment
- Có nhiều loại Time Selection: AnalogClockChronometorDatePickerDialog,TimePickerDialog. Nhưng Tôi chỉ giới thiệu 2 control cuối mà thôi, các control khác các bạn tự tìm hiểu thêm trên mạng:
20_time_0
- Hình bên trái là DatePickerDialog (dùng để thiết lập ngày tháng năm), hình bên phải làTimePickerDialog( dùng để thiết lập giờ phút).
- Theo Tôi thì chúng ta không nên kéo thả các control này ra màn hình vì nó chiếm hết không gian của các control khác, với lại màn hình điện thoại quá nhỏ nên nó sẽ không phù hợp tí nào khi bạn cố tình kéo thả nó ra. Vì vậy Tôi khuyên bạn nên viết code động, cho một Button để người sử dụng chọn Ngày tháng hay giờ giấc, khi nhấn vào nó thì mới hiển thị các dialog tương ứng này lên.
- Tôi sẽ có một ví dụ cụ thể để thực hành về 2 control này, bạn hãy chú ý theo dõi và thực hành lại thật tốt.
Yêu cầu ứng dụng như sau:
-          Viết chương trình quản lý mục tiêu hoàn thành công việc hàng tuần: Lý do chúng ta làm việc không có quy củ, không nhất quán, gặp đâu làm đó, đang làm việc này thấy việc kia sảy ra lại nhảy qua việc đó làm để dở công việc cũ chưa xong, không theo quy trình định sẵn dẫn đến kết thúc một ngày mà cuối cùng không hoàn thành được việc gì cả.
-          Thiết kế giao diện như hình bên dưới và thực hiện một số chức năng:
20_time_1
  1. Khi chọn nút Date sẽ hiển thị DatePickerDialog – cập nhật Ngày hoàn thành
  2. Khi chọn nút Time sẽ hiển thị TimePickerDialog – cập nhật giờ hoàn thành
  3. Khi chọn nút Thêm công việc (Thêm CV), chương trình sẽ cập nhập vào ListView bên dưới màn hình
  4. Khi nhấn vào phần tử nào thì hiển thị chi tiết Nội Dung công việc phải hoàn thành
  5. Khi nhấn thật lâu vào phần tử nào trên ListView thì xóa phần tử (công việc) đó.
- Bài tập này Tôi đưa ra là tiền đề để làm phần Android Service cụ thể là Alarm Manager (Khi nào tới phần đó Tôi sẽ nhắc lại bài này). Bạn cứ tưởng tượng phần mềm này nó giống như chương trình báo thức đó bạn. Tới giờ là nó Beeng ! Beeng! la làng lên để nhắc nhở các bạn. Nhưng hiện giờ bạn hãy quên điều đó đi vì chúng ta cần phải đi từ từ và phải hiểu thật thấu đáo các thành phần căn bản trước đã, giờ bạn chỉ cần thao tác được 5 yêu cầu của Tôi nêu bên trên là đã đạt rồi.
- Ta sẽ giải quyết yêu cầu bài toán này như sau:
1) Trước tiên Tôi sẽ ôn tập lại DateCalendarSimpleDateFormat cho bạn:
- Cách sử dụng Date để xuất Ngày/Tháng / Năm:
1
2
3
4
5
6
7
8
9
10
11
12
public static void XuatNgayThangNam()
 {
 //Tạo đối tượng date sẽ lấy date hiện tại
 Date date = new Date();
 //Muốn xuất Ngày/Tháng/Năm , ví dụ 12/04/2013
 String strDateFormat = "dd/MM/yyyy";
 //tạo đối tượng SimpleDateFormat;
 SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);
 //gọi hàm format để lấy chuỗi ngày tháng năm đúng theo yêu cầu
 System.out.println("Ngày hôm nay : " + sdf.format(date));
 }
- Tại thời điểm này thì Tôi gọi hàm trên  sẽ ra  kết quả:
Ngày hôm nay : 12/04/2013
- Cách sử dụng Date để xuất Giờ:Phút:Giây :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static void XuatGioPhutGiay()
 {
 //Tạo đối tượng date sẽ lấy date hiện tại
 Date date = new Date();
 //Muốn xuất Giờ:Phút:Giây AM (PM)
 String strDateFormat12 = "hh:mm:ss a";
 String strDateFormat24 = "HH:mm:ss a";
 SimpleDateFormat sdf =null;
 //Tạo đối tượng SimpleDateFormat với định dạng 12
 sdf= new SimpleDateFormat(strDateFormat12);
 //1. gọi hàm format để lấy giờ:phút:giây loại 12
 System.out.println("Giờ định dạng 12 : " + sdf.format(date));
 //Tạo đối tượng SimpleDateFormat với định dạng 24
 sdf = new SimpleDateFormat(strDateFormat24);
 //2. gọi hàm format để lấy giờ:phút:giây loại 24
 System.out.println("Giờ định dạng 24 : " + sdf.format(date));
 }
- Khi gọi hàm trên thì Tôi sẽ có kết quả (tính tại thời điểm đó):
Giờ định dạng 12 : 04:35:08 PM
Giờ định dạng 24 : 16:35:08 PM
- Bạn quan sát dòng lệnh số 7 :  “hh:mm:ss a”, với hh là viết chữ thường thì bạn sẽ được định dạng giờ 12. ký tự a ở cuối dùng để hiện thị AM hay là PM tùy thuộc vào giờ lúc đó.
- Bạn quan sát dòng lệnh số 8: HH:mm:ss a”, với HH là viết chữ HOA thì bạn sẽ được định dạng giờ 24. ký tự a ở cuối dùng để hiện thị AM hay là PM tùy thuộc vào giờ lúc đó. Nhưng bạn nhớ một điều là khi sử dụng định dạng giờ là 24 thì chả ai gán kèm theo AM hay PM đằng sau làm gì. (Không biết Tôi có nói đúng không nhỉ? nếu không đúng thì các bạn cứ cho là Tôi nói đúng để an ủi cũng được) Nên đối với định dạng 24 giờ bạn nên bỏ ký tự a đằng sau ra.
- Chú ý bạn có thể kết hợp hiển thị Ngày/Tháng/Năm giờ hiện tại: “dd/MM/yyyy hh:mm:ss a” 
- Cách sử dụng Calendar (class này bây giờ rất được ưa chuộng, bạn nên tập làm quen với nó):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public static void SudungCalendar()
 {
 //Lấy đối tượng Calendar ra, mặc định ngày hiện tại
 Calendar now = Calendar.getInstance();
 //Muốn xuất Giờ:Phút:Giây AM (PM)
 String strDateFormat12 = "hh:mm:ss a";
 String strDateFormat24 = "HH:mm:ss";
 SimpleDateFormat sdf =null;
 //Tạo đối tượng SimpleDateFormat với định dạng 12
 sdf= new SimpleDateFormat(strDateFormat12);
 //1. gọi hàm format để lấy giờ:phút:giây loại 12
 System.out.println("Giờ định dạng 12 : " +
                 sdf.format(now.getTime()));
 //Tạo đối tượng SimpleDateFormat với định dạng 24
 sdf = new SimpleDateFormat(strDateFormat24);
 //2. gọi hàm format để lấy giờ:phút:giây loại 24
 System.out.println("Giờ định dạng 24 : " +
                sdf.format(now.getTime()));
 String strDateFormat = "dd/MM/yyyy hh:mm:ss a";
 sdf = new SimpleDateFormat(strDateFormat);
 System.out.println("Bây giờ là: " + sdf.format(now.getTime()));
 System.out.println("Năm hiện tại : " + now.get(Calendar.YEAR));
 //Tháng tính từ 0 tới 11, nên phải + thêm 1
 System.out.println("Tháng hiện tại : " +
                       (now.get(Calendar.MONTH) + 1 ));
 System.out.println("Ngày hiện tại : " +
                       now.get(Calendar.DATE));
 System.out.println("Lấy giờ định dạng 12 là : "
 + now.get(Calendar.HOUR));
 System.out.println("Lấy giờ định dạng 24 là : "
 + now.get(Calendar.HOUR_OF_DAY));
 System.out.println("Phút hiện tại : " +
                       now.get(Calendar.MINUTE));
 System.out.println("Giây hiện tại : " +
                      now.get(Calendar.SECOND));
 System.out.println("Mili giây hiện tại: " +
                      now.get(Calendar.MILLISECOND));
 }
Xem tiếp P2.....

1 nhận xét:

  1. Anh ơi cho em hỏi 1 chút là cái button để vào DatePickerDialog của em lằm trong 1 cái dialog khác thì em chuyển context vào như thế nào ạ

    Trả lờiXóa