DatePickerDialog và TimePickerDialog trong Android

Xem: 3987    Tải: 0   Thảo luận: 0   Mục: Android   Lĩnh vực: Khác

9 điểm   ( 7 đánh giá ) File đã được kiểm thử


Hôm nay mình xin hướng dẫn các bạn cách dùng 2 control Date time trong Android đó là DatePickerDialog và TimePickerDialog.

Để có thể sử dụng được 2 control này thì bạn nên xem qua bài hướng dẫn Date, Calendar, SimpleDateFormat trong Java  để có thể hiểu rõ hơn vầ kiểu Date time này.

1. Xây dựng giao diện :

Các bạn có thể xem gia diện demo một chương trình như dưới, Đây là một chương trình demo quản lý giờ giấc, công việc. Khi người dùng nhập các thông tin như tên công việc, nội dung, lựa chọn ngày bắt đầu, giờ bắt đầu, sau đó click nút thêm mới sẽ mở ra một giao diện mới , có 1 listview chứa danh sách các công việc mà người dùng đã lưu.

DatePickerDialog,TimePickerDivafva android demo

Đầu tiên là về giao diện tôi sẽ đi xây dựng 2 layout tương ứng như sau :

 activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:orientation="vertical"
 tools:context=".MainActivity" >
 
<TextView
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:background="#61DA29"
 android:text="Quản lý công việc "
 android:textSize="20sp" />
 
<TableLayout
 android:layout_width="fill_parent"
 android:layout_height="wrap_content" >
 
<TableRow
 android:layout_width="fill_parent"
 android:layout_height="wrap_content" >
 
<TextView
 android:id="@+id/tvTenCongViec"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="Tên công việc: "
 android:textSize="17sp" />
 
<EditText
 android:id="@+id/etTenCongViec"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:layout_weight="100"
 android:textSize="17sp" />
 </TableRow>
 
<TableRow
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" >
 
<TextView
 android:id="@+id/tvNoiDungCongViec"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Nội dung: "
 android:textSize="17sp" />
 
<EditText
 android:id="@+id/etNoiDungCongViec"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_weight="100"
 android:textSize="17sp" />
 </TableRow>
 
<TableRow
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" >
 
<TextView
 android:id="@+id/tvTimeStart"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="Ngày bắt đầu: "
 android:textSize="17sp" />
 </TableRow>
 
<TableRow
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" >
 
<TextView
 android:id="@+id/tvNgayBatDau"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="00/00/00"
 android:textSize="17sp" />
 
<Button
 android:id="@+id/btNgayBatDau"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:text="Chọn" />
 </TableRow>
 
<TableRow
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" >
 
<TextView
 android:id="@+id/tvTimeFinish"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Giờ bắt đầu: "
 android:textSize="17sp" />
 </TableRow>
 
<TableRow
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" >
 
<TextView
 android:id="@+id/tvGioBatDau"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="00/00/00"
 android:textSize="17sp" />
 
<Button
 android:id="@+id/btGioBatDau"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:text="Chọn" />
 </TableRow>
 </TableLayout>
 
<Button
 android:id="@+id/btThemMoi"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:background="#61DA29"
 android:text="Thêm Mới " />
 
</LinearLayout>

cong_viec.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical" >
 
 <TextView
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:background="#61DA29"
 android:text="Danh sách các công việc "
 android:textSize="20sp" />
 
<ListView
 android:id="@+id/lvCongViec"
 android:layout_width="match_parent"
 android:layout_height="300sp" >
 </ListView>
 
<Button
 android:id="@+id/btBack"
 android:layout_gravity="center"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Quay Lại"/>
 
</LinearLayout>

2. Code các sự kiện.

Đầu tiên tôi sẽ tạo ra 1 class có tên là CongViec.java để chứa đựng các thuộc tính, phương thức của 1 công việc cụ thể :

package com.example.datetime;
 
import java.util.Date ;
import java.text.SimpleDateFormat;
import java.util.Locale;
 
public class CongViec {
 private String tenCongViec;
 private String noiDungCongViec;
 private Date ngayBatDau;
 private Date gioBatDau;
 
public String getTenCongViec() {
 return tenCongViec;
 }
 
public void setTenCongViec(String tenCongViec) {
 this.tenCongViec = tenCongViec;
 }
 
public String getNoiDungCongViec() {
 return noiDungCongViec;
 }
 
public void setNoiDungCongViec(String noiDungCongViec) {
 this.noiDungCongViec = noiDungCongViec;
 }
 
public Date getNgayBatDau() {
 return ngayBatDau;
 }
 
public void setNgayBatDau(Date ngayBatDau) {
 this.ngayBatDau = ngayBatDau;
 }
 
public Date getGioBatDau() {
 return gioBatDau;
 }
 
public void setGioBatDau(Date gioBatDau) {
 this.gioBatDau = gioBatDau;
 }
 
public CongViec(String tenCongViec, String noiDungCongViec, Date ngay, Date gio)
 {
 super();
 this.tenCongViec = tenCongViec;
 this.noiDungCongViec = noiDungCongViec;
 this.ngayBatDau = ngay;
 this.gioBatDau = gio;
 }
 
public CongViec() {
 super();
 }
 public String getDateFormat(Date d) {
 SimpleDateFormat dft = new SimpleDateFormat("dd/MM/yyyy",
 Locale.getDefault());
 return dft.format(d);
 }
 public String getHourFormat(Date d) {
 SimpleDateFormat dft = new SimpleDateFormat("hh:mm a",
 Locale.getDefault());
 return dft.format(d);
 }
 
@Override
 public String toString() {
 return this.tenCongViec + "-" + getDateFormat(this.ngayBatDau) + "-"
 + getHourFormat(this.gioBatDau);
 }
}

Tại MainActivity.java tôi xây dựng các phương thức :

showTimePickerDialog() để hiện thị lựa chọn giờ cho người dùng :

public void showTimePickerDialog() {
 OnTimeSetListener callback = new OnTimeSetListener() {
 public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
 String s = hourOfDay + ":" + minute;
 int hourTam = hourOfDay;
 if (hourTam > 12)
 hourTam = hourTam - 12;
 tvGioBatDau.setText(hourTam + ":" + minute
 + (hourOfDay > 12 ? " PM" : " AM"));
 tvGioBatDau.setTag(s);
 calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
 calendar.set(Calendar.MINUTE, minute);
 gioBatDau = calendar.getTime();
 }
 };
 String s = tvGioBatDau.getTag() + "";
 String strArr[] = s.split(":");
 int gio = Integer.parseInt(strArr[0]);
 int phut = Integer.parseInt(strArr[1]);
 TimePickerDialog time = new TimePickerDialog(MainActivity.this,
 callback, gio, phut, true);
 time.setTitle("Chọn giờ bắt đầu");
 time.show();
 }

showDatePickerDialog() để hiển thị lựa chọn ngày tháng năm cho người dùng.

public void showDatePickerDialog() {
 OnDateSetListener callback = new OnDateSetListener() {
 public void onDateSet(DatePicker view, int year, int monthOfYear,
 int dayOfMonth) {
 tvNgayBatDau.setText((dayOfMonth) + "/" + (monthOfYear + 1) + "/"
 + year);
 calendar.set(year, monthOfYear, dayOfMonth);
 ngayBatDau = calendar.getTime();
 }
 };
 String s = tvNgayBatDau.getText() + "";
 String strArrtmp[] = s.split("/");
 int ngay = Integer.parseInt(strArrtmp[0]);
 int thang = Integer.parseInt(strArrtmp[1]) - 1;
 int nam = Integer.parseInt(strArrtmp[2]);
 DatePickerDialog pic = new DatePickerDialog(MainActivity.this,
 callback, nam, thang, ngay);
 pic.setTitle("Chọn ngày bắt đầu");
 pic.show();
 }

getActivity()  để liên kết tới id của các control trong layout

public void getActivity() {
 tvNgayBatDau = (TextView) findViewById(R.id.tvNgayBatDau);
 tvGioBatDau = (TextView) findViewById(R.id.tvGioBatDau);
 btThemMoi = (Button) findViewById(R.id.btThemMoi);
 btNgayBatDau = (Button) findViewById(R.id.btNgayBatDau);
 btGioBatDau = (Button) findViewById(R.id.btGioBatDau);
 etTenCongViec = (EditText) findViewById(R.id.etTenCongViec);
 etNoiDungCongViec = (EditText) findViewById(R.id.etNoiDungCongViec);
 }

getDefaultInfor() để lấy các thông số mạc định và hiển thị chúng khi chương trình bắt đầu chạy.

public void getDefaultInfor() {
 calendar = Calendar.getInstance();
 SimpleDateFormat dft = null;
 dft = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
 String strDate = dft.format(calendar.getTime());
 tvNgayBatDau.setText(strDate);
 dft = new SimpleDateFormat("hh:mm a", Locale.getDefault());
 String strTime = dft.format(calendar.getTime());
 tvGioBatDau.setText(strTime);
 dft = new SimpleDateFormat("HH:mm", Locale.getDefault());
 tvGioBatDau.setTag(dft.format(calendar.getTime()));
 etTenCongViec.requestFocus();
 ngayBatDau = calendar.getTime();
 gioBatDau = calendar.getTime();
 }

Và đây là toàn bộ code của MainActivity.java

package com.example.datetime;
 
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
 
import android.os.Bundle;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;
 
public class MainActivity extends Activity {
 TextView tvNgayBatDau, tvGioBatDau;
 EditText etTenCongViec, etNoiDungCongViec;
 Button btThemMoi, btNgayBatDau, btGioBatDau;
 Calendar calendar;
 Date ngayBatDau;
 Date gioBatDau;
 
@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 getActivity();
 getDefaultInfor();
 
// Chọn ngày bắt đầu
 btNgayBatDau.setOnClickListener(new OnClickListener() {
 
 @Override
 public void onClick(View v) {
 // TODO Auto-generated method stub
 showDatePickerDialog();
 }
 });
 // CHọn giờ bắt đầu
 btGioBatDau.setOnClickListener(new OnClickListener() {
 
 @Override
 public void onClick(View v) {
 // TODO Auto-generated method stub
 showTimePickerDialog();
 }
 });
 // Thêm mới công việc và chuyển activity
 btThemMoi.setOnClickListener(new OnClickListener() {
 
 @Override
 public void onClick(View v) {
 // TODO Auto-generated method stub
 Intent i = new Intent(getApplicationContext(), DanhSachCongViec.class);
 i.putExtra("tenCongViec", etTenCongViec.getText().toString());
 i.putExtra("noiDungCongViec", etNoiDungCongViec.getText().toString());
 i.putExtra("ngayBatDau", tvNgayBatDau.getText().toString());
 i.putExtra("gioBatDau", tvGioBatDau.getText().toString());
 startActivity(i);
 }
 });
 }
 
// Lấy id các Control/////////////////////////////////////////////
 public void getActivity() {
 tvNgayBatDau = (TextView) findViewById(R.id.tvNgayBatDau);
 tvGioBatDau = (TextView) findViewById(R.id.tvGioBatDau);
 btThemMoi = (Button) findViewById(R.id.btThemMoi);
 btNgayBatDau = (Button) findViewById(R.id.btNgayBatDau);
 btGioBatDau = (Button) findViewById(R.id.btGioBatDau);
 etTenCongViec = (EditText) findViewById(R.id.etTenCongViec);
 etNoiDungCongViec = (EditText) findViewById(R.id.etNoiDungCongViec);
 }
 
// ////////////////////////////////////////////////////////
 
public void getDefaultInfor() {
 calendar = Calendar.getInstance();
 SimpleDateFormat dft = null;
 dft = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
 String strDate = dft.format(calendar.getTime());
 tvNgayBatDau.setText(strDate);
 dft = new SimpleDateFormat("hh:mm a", Locale.getDefault());
 String strTime = dft.format(calendar.getTime());
 tvGioBatDau.setText(strTime);
 dft = new SimpleDateFormat("HH:mm", Locale.getDefault());
 tvGioBatDau.setTag(dft.format(calendar.getTime()));
 etTenCongViec.requestFocus();
 ngayBatDau = calendar.getTime();
 gioBatDau = calendar.getTime();
 }
 
// Hiển thị Time - // Picker--------------------------------------------------------
 
public void showTimePickerDialog() {
 OnTimeSetListener callback = new OnTimeSetListener() {
 public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
 String s = hourOfDay + ":" + minute;
 int hourTam = hourOfDay;
 if (hourTam > 12)
 hourTam = hourTam - 12;
 tvGioBatDau.setText(hourTam + ":" + minute
 + (hourOfDay > 12 ? " PM" : " AM"));
 tvGioBatDau.setTag(s);
 calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
 calendar.set(Calendar.MINUTE, minute);
 gioBatDau = calendar.getTime();
 }
 };
 String s = tvGioBatDau.getTag() + "";
 String strArr[] = s.split(":");
 int gio = Integer.parseInt(strArr[0]);
 int phut = Integer.parseInt(strArr[1]);
 TimePickerDialog time = new TimePickerDialog(MainActivity.this,
 callback, gio, phut, true);
 time.setTitle("Chọn giờ hoàn thành");
 time.show();
 }
 
// --------------------------------------------------------------------------------
 // Hiển thị Date -
 // Picker--------------------------------------------------------
 public void showDatePickerDialog() {
 OnDateSetListener callback = new OnDateSetListener() {
 public void onDateSet(DatePicker view, int year, int monthOfYear,
 int dayOfMonth) {
 tvNgayBatDau.setText((dayOfMonth) + "/" + (monthOfYear + 1) + "/"
 + year);
 calendar.set(year, monthOfYear, dayOfMonth);
 ngayBatDau = calendar.getTime();
 }
 };
 
 String s = tvNgayBatDau.getText() + "";
 String strArrtmp[] = s.split("/");
 int ngay = Integer.parseInt(strArrtmp[0]);
 int thang = Integer.parseInt(strArrtmp[1]) - 1;
 int nam = Integer.parseInt(strArrtmp[2]);
 DatePickerDialog pic = new DatePickerDialog(MainActivity.this,
 callback, nam, thang, ngay);
 pic.setTitle("Chọn ngày hoàn thành");
 pic.show();
 }
 
// hết Picker--------------------------------------------------------
 
@Override
 public boolean onCreateOptionsMenu(Menu menu) {
 // Inflate the menu; this adds items to the action bar if it is present.
 getMenuInflater().inflate(R.menu.main, menu);
 return true;
 }
 
}

Để hiển thị được layout thứ 2, tôi tạo 1 activity mới có tên DanhSachCongViec.java

package com.example.datetime;
 
import java.util.ArrayList;
import java.util.Date;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.view.View.OnClickListener;
 
public class DanhSachCongViec extends Activity {
 
ListView lvCongViec;
 ArrayList<CongViec> arrCongViec = new ArrayList<CongViec>();
 ArrayAdapter<CongViec> adapterCongViec;
 Button btBack;
 
@Override
 protected void onCreate(Bundle savedInstanceState) {
 // TODO Auto-generated method stub
 super.onCreate(savedInstanceState);
 setContentView(R.layout.cong_viec);
 lvCongViec = (ListView) findViewById(R.id.lvCongViec);
 btBack = (Button) findViewById(R.id.btBack);
 adapterCongViec = new ArrayAdapter<CongViec>(this,
 android.R.layout.simple_list_item_1, arrCongViec);
 lvCongViec.setAdapter(adapterCongViec);
 themCongViec();
 btBack.setOnClickListener(new OnClickListener() {
 
@Override
 public void onClick(View v) {
 // TODO Auto-generated method stub
 Intent back = new Intent(getApplicationContext(),
 MainActivity.class);
 startActivity(back);
 }
 });
 }
 
// -----------Hàm gán cong việc vào Listview
 public void themCongViec() {
 Intent i = getIntent();
 String tenCongViec = i.getStringExtra("tenCongViec");
 String noiDungCongViec = i.getStringExtra("noiDungCongViec");
 Date ngay = new Date();
 ngay.setTime(i.getLongExtra("ngayBatDau", -1));
 Date gio = new Date();
 gio.setTime(i.getLongExtra("gioBatDau", -1));
 CongViec congviec = new CongViec(tenCongViec, noiDungCongViec, ngay,
 gio);
 congviec.setNgayBatDau(gio);
 arrCongViec.add(congviec);
 adapterCongViec.notifyDataSetChanged();
 
}
}

Và đây là kết quả cuối cùng :

DatePickerDialog va TimePickerDivafva trong android DatePickerDialog va TimePickerDialog trong Android

TimePickerDialog trong Android DatePickerDialog Android

DatePickerDialog và TimePickerDialog trong Android

DatePickerDialog và TimePickerDialog trong Android Đăng ngày 11-02-2014  Hôm nay mình xin hướng dẫn các bạn cách dùng 2 control Date time trong Android đó là DatePickerDialog và TimePickerDialog. Để có thể sử dụng được 2 control này thì bạn nên xem qua bài hướng dẫn Date, Calendar, SimpleDateFormat trong Java để có thể hiểu rõ hơn vầ kiểu Date time này. 1.2857142857143/10 3987

Thảo luận:

Để bình luận bạn phải đăng nhập thành viên.

File tương tự

Files cùng mục

 

File tải nhiều nhất

Megacode.vn - Thư viện mã nguồn chia sẻ, tải file cho cộng đồng
Copyright © 2013-2016. All rights reserved. Bản quyền thuộc VinaGon
Địa chỉ: Số 38 Hàng Bè, Hàng Bạc, Hoàn Kiếm, Hà Nội.
Văn phòng giao dịch: Phòng 28, Tầng 6, HH1A Linh Đàm, Hoàng Mai, Hà Nội
Email: info@vinagon.com | Website: www.vinagon.com | Điện thoại: (+844) 6. 32.979.36;
logo megacode

Megacode đã đăng ký với Bộ Công Thương
Thư viện mã nguồn mở lớn nhất Việt Nam.



Hỗ trợ khách hàng trên Megacode
Hỗ trợ kỹ thuật cho thành viên:
Tổng đài: (+844) 6. 32.979.36
Số di động (Hotline): 0969.091.265
Thời gian làm việc:
Sáng: 8h-12h; Chiều: 13h30-17h30
(Nghỉ chiều T7, CN và các ngày lễ, tết)
Chat với Megacode
https://www.facebook.com/megacodevn