Android 개발 사용자 정의 날짜 선택 대화 상자 (확장 기능)

Android 는 날짜 와 시간 선택 대화 상 자 를 팝 업 할 때 DatePickerDialog 와 TimePickerDialog 컨트롤 을 제공 합 니 다. 모두 독립 되 어 있 기 때문에 편리 하 게 설정 할 수 없습니다. "yy - MM - dd HH: mm: ss" 형 날짜 시간 입 니 다. 따라서 DatePickerDialog 구성 요 소 를 정의 해 야 합 니 다.
먼저 레이아웃 인터페이스 를 써 야 합 니 다: 이 인터페이스의 XML 코드 는 다음 과 같 습 니 다.
레이아웃 이름: 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>

상기 코드 분석: 레이아웃 에 두 시간 을 넣 고 공간 을 선택 합 니 다. 하 나 는 날 짜 를 표시 하고 하 나 는 시간 을 표시 합 니 다.
그리고 우 리 는 사용자 정의 시간 선택 기의 종 류 를 쓰기 시 작 했 습 니 다. 코드 는 다음 과 같 습 니 다.
클래스 이름: DateTimePickerDialog
package com.jinbi.app.ui;

import java.text.SimpleDateFormat;
import java.util.Calendar;
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.DatePicker.OnDateChangedListener;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;

import com.jinbi.R;

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));
	}
	
	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 view, int year, int monthOfYear,
								int dayOfMonth) {
							Calendar calendar = Calendar.getInstance();
							calendar.set(datePicker.getYear(), datePicker.getMonth(),datePicker.getDayOfMonth());
							SimpleDateFormat sdf = new SimpleDateFormat("yyy-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() {
						@Override
						public void onTimeSet(TimePicker view, 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).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;
		}
		}
	
	@Override
	public void onTimeChanged(TimePicker arg0, int arg1, int arg2) {
		onDateChanged(null, 0, 0, 0);
	}

	@Override
	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("yyy-MM-dd HH:mm:ss");
		dateTime = sdf.format(calendar.getTime());
		ad.setTitle(dateTime);
	}
}
이로써 이 컨트롤 은 작성 이 완 료 된 셈 이다.
이 컨트롤 을 사용 하 는 방법 은 다음 과 같 습 니 다.
		dietTime.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				   DateTimePickerDialog dateTimePicKDialog = new DateTimePickerDialog(
						     RecordActivity.this);
			       dateTimePicKDialog.dateTimePickDialog(dietTime, 0);
			}
		});

프로젝트 는 휴대 전화 에 직접 배치 되 어 있 기 때문에 캡 처 하 는 것 이 불편 합 니 다. 지금 은 캡 처 를 하지 않 고 나중에 기회 가 있 으 면 다시 사진 을 찍 겠 습 니 다.
잘 모 르 시 면 참고 자 료 를 제공 하 세 요.
사용자 정의 날짜 와 시간 데모

좋은 웹페이지 즐겨찾기