Android日時選択コントロール
8698 ワード
Android日時選択コントロール、直接コード:
使用方法:
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.util.Log;
import android.view.View;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.TimePicker;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* : private EditText inputDate;// private String
* initDateTime="2012 9 3 14:44",// :
* inputDate.setOnClickListener(new OnClickListener() {
*
* @author
* @Override public void onClick(View v) { DateTimePickDialogUtil
* dateTimePicKDialog=new
* DateTimePickDialogUtil(SinvestigateActivity.this,initDateTime);
* dateTimePicKDialog.dateTimePicKDialog(inputDate);
* <p/>
* } });
*/
@SuppressLint("SimpleDateFormat")
//public class DateTimePickDialogUtil implements OnDateChangedListener, OnTimeChangedListener {
public class DateTimePickDialogUtil implements OnDateChangedListener {
private DatePicker datePicker;
private TimePicker timePicker;
private AlertDialog ad;
private String dateTime;
private String initDateTime;
private Activity activity;
/**
*
*
* @param activity : activity
* @param initDateTime ,
*/
public DateTimePickDialogUtil(Activity activity, String initDateTime) {
this.activity = activity;
this.initDateTime = initDateTime;
}
public void init(DatePicker datePicker) {
Calendar calendar = Calendar.getInstance();
if (!(null == initDateTime || "".equals(initDateTime))) {
calendar = this.getCalendarByInintData(initDateTime, 1);
} else {
initDateTime = calendar.get(Calendar.YEAR) + "-" + calendar.get(Calendar.MONTH) + "-" + calendar.get(Calendar.DAY_OF_MONTH);
}
datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), this);
}
/**
*
*
* @param inputDate :
* @return
*/
public AlertDialog dateTimePicKDialog(final TextView inputDate, String strStart, String strEnd) {
long maxDate = 0;
long minDate = 0;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startDate = sdf.parse(strStart);
Date endDate = sdf.parse(strEnd);
maxDate = endDate.getTime();
minDate = startDate.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
LinearLayout dateTimeLayout = (LinearLayout) activity.getLayoutInflater().inflate(R.layout.common_datetime, null);
datePicker = (DatePicker) dateTimeLayout.findViewById(R.id.datepicker);
datePicker.setMaxDate(maxDate);
datePicker.setMinDate(minDate);
timePicker = (TimePicker) dateTimeLayout.findViewById(R.id.timepicker);
timePicker.setVisibility(View.GONE);
init(datePicker);
ad = new AlertDialog.Builder(activity)
.setTitle(initDateTime)
.setView(dateTimeLayout)
.setPositiveButton(" ", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
inputDate.setText(dateTime);
// inputDate.setText(getOneDay(dateTime));
}
})
.setNegativeButton(" ", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
inputDate.setText(" ");
}
}).show();
onDateChanged(datePicker, 0, 0, 0);
return ad;
}
private String getOneDay(String s) {
try {
String sss = "2015-12-25 17:23:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date after = sdf.parse(sss);
long afterDate = after.getTime() - System.currentTimeMillis();
return afterDate + "";
} catch (Exception e) {
Log.e("e--", e.toString());
}
return s;
}
public AlertDialog dateTimePicKDialog(final TextView inputDate) {
LinearLayout dateTimeLayout = (LinearLayout) activity.getLayoutInflater().inflate(R.layout.common_datetime, null);
datePicker = (DatePicker) dateTimeLayout.findViewById(R.id.datepicker);
timePicker = (TimePicker) dateTimeLayout.findViewById(R.id.timepicker);
timePicker.setVisibility(View.GONE);
init(datePicker);
ad = new AlertDialog.Builder(activity)
.setTitle(initDateTime)
.setView(dateTimeLayout)
.setPositiveButton(" ", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
inputDate.setText(dateTime);
}
})
.setNegativeButton(" ", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
inputDate.setText(" ");
}
}).show();
onDateChanged(datePicker, 0, 0, 0);
return ad;
}
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
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());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
dateTime = sdf.format(calendar.getTime());
ad.setTitle(dateTime);
}
/**
* 2012 07 02 , calendar
*
* @param initDateTime
* @return Calendar
*/
private Calendar getCalendarByInintData(String initDateTime, int state) {
Log.e("yearStr", initDateTime + state);
Calendar calendar = Calendar.getInstance();
// 2012 07 02 16:45
String date = spliteString(initDateTime, " ", "index", "front"); //
String time = spliteString(initDateTime, " ", "index", "back"); //
String yearStr = spliteString(date, "-", "index", "front"); //
String monthAndDay = spliteString(date, "-", "index", "back"); //
String monthStr = spliteString(monthAndDay, "-", "index", "front"); //
String dayStr = spliteString(monthAndDay, "-", "index", "back"); //
Log.e("yearStr", yearStr + dayStr);
int currentYear = Integer.valueOf(yearStr.trim()).intValue();
int currentMonth = Integer.valueOf(monthStr.trim()).intValue() - 1;
int currentDay = Integer.valueOf(dayStr.trim()).intValue();
calendar.set(currentYear, currentMonth, currentDay);
return calendar;
}
/**
*
*
* @param srcStr
* @param pattern
* @param indexOrLast
* @param frontOrBack
* @return
*/
public static String spliteString(String srcStr, String pattern, String indexOrLast, String frontOrBack) {
String result = "";
int loc = -1;
if (indexOrLast.equalsIgnoreCase("index")) {
loc = srcStr.indexOf(pattern); //
} else {
loc = srcStr.lastIndexOf(pattern); //
}
if (frontOrBack.equalsIgnoreCase("front")) {
if (loc != -1)
result = srcStr.substring(0, loc); //
} else {
if (loc != -1)
result = srcStr.substring(loc + 1, srcStr.length()); //
}
return result;
}
}
使用方法:
DateTimePickDialogUtil dataTimeUtil = new DateTimePickDialogUtil(this, null);
dataTimeUtil.dateTimePicKDialog(tvPsInfo, getStartDate(), useEndDate).show();