自訂Android日期時間選擇控制項DateTimePickerDialog

來源:互聯網
上載者:User

Android系統提供了DatePicker、TimePicker、DatePickerDialog、TimePickerDialog控制項用於日期和時間的選擇和設定,但是它們都是相對獨立的,不能方便的設定“yyyy-MM-dd HH:mm:ss”型日期時間,下面是使用這幾種組件自訂的一個日期時間選擇控制項DateTimePickerDialog,可以方便的設定“yyyy-MM-dd HH:mm:ss”型日期時間,“yyyy-MM-dd”型日期和“HH:mm:ss”型時間,

代碼實現:

 代碼如下 複製代碼

DateTimePickerDialog.java

package me.gogogogo.util;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import me.gogogogo.activity.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.content.DialogInterface;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;
/**
 * 日期時間選擇控制項
 * @author 大漠
 */
public class DateTimePickerDialog implements  OnDateChangedListener,OnTimeChangedListener{
 private DatePicker datePicker;
 private TimePicker timePicker;
 private AlertDialog ad;
 private String dateTime;
 private String initDateTime;
 private Activity activity;
 
 /**
  * 日期時間彈出選擇框構
  * @param activity:調用的父activity
  */
 public DateTimePickerDialog(Activity activity)
 {
  this.activity = activity;
 }
 
 public void init(DatePicker datePicker,TimePicker timePicker)
 {
  Calendar calendar= Calendar.getInstance();
  initDateTime=calendar.get(Calendar.YEAR)+"-"+calendar.get(Calendar.MONTH)+"-"+
    calendar.get(Calendar.DAY_OF_MONTH)+" "+
    calendar.get(Calendar.HOUR_OF_DAY)+":"+
    calendar.get(Calendar.MINUTE)+
    calendar.get(Calendar.SECOND);
  datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH), this);
  timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));
  timePicker.setCurrentMinute(calendar.get(Calendar.MINUTE));
 }
 
 /**
  * 彈出日期時間選擇框
  * @param dateTimeTextEdite 需要設定的日期時間文本編輯框
  * @param type: 0為日期時間類型:yyyy-MM-dd HH:mm:ss
  *         1為日期類型:yyyy-MM-dd
  *         2為時間類型:HH:mm:ss
  * @return
  */
 public AlertDialog dateTimePicKDialog(final EditText dateTimeTextEdite, int type)
 {
  Calendar c = Calendar.getInstance();
  switch (type) {
  case 1:
   new DatePickerDialog(activity,
     new DatePickerDialog.OnDateSetListener() {
      public void onDateSet(DatePicker datePicker, int year, int monthOfYear,
        int dayOfMonth) {
       Calendar calendar = Calendar.getInstance();
       calendar.set(datePicker.getYear(), datePicker.getMonth(),
         datePicker.getDayOfMonth());
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
       dateTime=sdf.format(calendar.getTime());
       dateTimeTextEdite.setText(dateTime);
      }
     },
     c.get(Calendar.YEAR),
     c.get(Calendar.MONTH),
     c.get(Calendar.DATE)).show();
   return null;
  case 2:
   new TimePickerDialog(activity,
     new TimePickerDialog.OnTimeSetListener() {
      public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute) {
       Calendar calendar = Calendar.getInstance();
       calendar.set(Calendar.YEAR, Calendar.MONTH,
         Calendar.DAY_OF_MONTH, timePicker.getCurrentHour(),
         timePicker.getCurrentMinute());
       SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
       dateTime=sdf.format(calendar.getTime());
       dateTimeTextEdite.setText(dateTime);
      }
     },
     c.get(Calendar.HOUR_OF_DAY),
     c.get(Calendar.MINUTE),
     true).show();
   return null;
  default:
   LinearLayout dateTimeLayout  = (LinearLayout) activity.getLayoutInflater().inflate(R.layout.datetime, null);
   datePicker = (DatePicker) dateTimeLayout.findViewById(R.id.datepicker);
   timePicker = (TimePicker) dateTimeLayout.findViewById(R.id.timepicker);
   init(datePicker,timePicker);
   timePicker.setIs24HourView(true);
   timePicker.setOnTimeChangedListener(this);
     
   ad = new AlertDialog.Builder(activity).setIcon(R.drawable.datetimeicon).setTitle(initDateTime).setView(dateTimeLayout).setPositiveButton("設定",
       new DialogInterface.OnClickListener()
       {
        public void onClick(DialogInterface dialog,
          int whichButton)
        {
         dateTimeTextEdite.setText(dateTime);
        }
       }).setNegativeButton("取消",
       new DialogInterface.OnClickListener()
       {
        public void onClick(DialogInterface dialog,
          int whichButton)
        {
         dateTimeTextEdite.setText("");
        }
       }).show();
   
   onDateChanged(null, 0, 0, 0);
   return ad;
  }
 }
 
 public void onTimeChanged(TimePicker view, int hourOfDay, int minute)
 {
  onDateChanged(null, 0, 0, 0);
 }

 public void onDateChanged(DatePicker view, int year, int monthOfYear,
   int dayOfMonth)
 {
  Calendar calendar = Calendar.getInstance();

  calendar.set(datePicker.getYear(), datePicker.getMonth(),
    datePicker.getDayOfMonth(), timePicker.getCurrentHour(),
    timePicker.getCurrentMinute());
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  dateTime=sdf.format(calendar.getTime());
  ad.setTitle(dateTime);
 }
 
}

布局檔案:

datetime.xml

 代碼如下 複製代碼

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <DatePicker
     android:id="@+id/datepicker"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content" />
 <TimePicker
     android:id="@+id/timepicker"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content" />
</LinearLayout>

使用執行個體:

MainActivity.java

 代碼如下 複製代碼

package me.gogogogo.activity;

import me.gogogogo.util.DateTimePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.app.Activity;

public class MainActivity extends Activity {
 private EditText date;
 private EditText time;
 private EditText datetime;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        datetime = (EditText) this.findViewById(R.id.datetime);
        date = (EditText) this.findViewById(R.id.date);
        time = (EditText) this.findViewById(R.id.time);
       
        datetime.setOnClickListener(new DateTimeOnClick());
        date.setOnClickListener(new DateOnClick());
        time.setOnClickListener(new TimeOnClick());
    }
   
    private final class DateTimeOnClick implements OnClickListener{
  public void onClick(View v) {
   DateTimePickerDialog dateTimePicKDialog = new DateTimePickerDialog(
     MainActivity.this);
   dateTimePicKDialog.dateTimePicKDialog(datetime, 0);
  }
    }
   
    private final class DateOnClick implements OnClickListener{
     public void onClick(View v) {
      DateTimePickerDialog dateTimePicKDialog = new DateTimePickerDialog(
     MainActivity.this);
   dateTimePicKDialog.dateTimePicKDialog(date, 1);
  }
    }
   
    private final class TimeOnClick implements OnClickListener{
     public void onClick(View v) {
      DateTimePickerDialog dateTimePicKDialog = new DateTimePickerDialog(
     MainActivity.this);
   dateTimePicKDialog.dateTimePicKDialog(time, 2);
  }
    }
}

設定之後日期時間控制項效果如下

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.