之前有发过一个选择控件的demo,有点小Bug,现在已经修复,喜欢的朋友可以去下载:http://download.csdn.net/detail/aiyuan0204/7062347
package com.ycf.blog_05_chinesechoosedemo.datedialog;
import java.util.Calendar;
import com.ycf.blog_05_chinesechoosedemo.R;
import android.content.Context;
import android.text.format.DateFormat;
import android.widget.FrameLayout;
import android.widget.NumberPicker;
import android.widget.NumberPicker.OnValueChangeListener;
public class DateTimePicker extends FrameLayout
{
private final NumberPicker mDateSpinner;
private final NumberPicker mHourSpinner;
private final NumberPicker mMinuteSpinner;
private Calendar mDate;
private int mHour,mMinute;
private String[] mDateDisplayValues = new String[7];
private OnDateTimeChangedListener mOnDateTimeChangedListener;
public DateTimePicker(Context context)
{
super(context);
mDate = Calendar.getInstance();
mHour=mDate.get(Calendar.HOUR_OF_DAY);
mMinute=mDate.get(Calendar.MINUTE);
inflate(context, R.layout.datedialog, this);
mDateSpinner=(NumberPicker)this.findViewById(R.id.np_date);
mDateSpinner.setMinValue(0);
mDateSpinner.setMaxValue(6);
updateDateControl();
mDateSpinner.setOnValueChangedListener(mOnDateChangedListener);
mHourSpinner=(NumberPicker)this.findViewById(R.id.np_hour);
mHourSpinner.setMaxValue(23);
mHourSpinner.setMinValue(0);
mHourSpinner.setValue(mHour);
mHourSpinner.setOnValueChangedListener(mOnHourChangedListener);
mMinuteSpinner=(NumberPicker)this.findViewById(R.id.np_minute);
mMinuteSpinner.setMaxValue(59);
mMinuteSpinner.setMinValue(0);
mMinuteSpinner.setValue(mMinute);
mMinuteSpinner.setOnValueChangedListener(mOnMinuteChangedListener);
}
private NumberPicker.OnValueChangeListener mOnDateChangedListener=new OnValueChangeListener()
{
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal)
{
mDate.add(Calendar.DAY_OF_MONTH, newVal - oldVal);
updateDateControl();
onDateTimeChanged();
}
};
private NumberPicker.OnValueChangeListener mOnHourChangedListener=new OnValueChangeListener()
{
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal)
{
mHour=mHourSpinner.getValue();
onDateTimeChanged();
}
};
private NumberPicker.OnValueChangeListener mOnMinuteChangedListener=new OnValueChangeListener()
{
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal)
{
mMinute=mMinuteSpinner.getValue();
onDateTimeChanged();
}
};
private void updateDateControl()
{
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(mDate.getTimeInMillis());
cal.add(Calendar.DAY_OF_YEAR, -7 / 2 - 1);
mDateSpinner.setDisplayedValues(null);
for (int i = 0; i < 7; ++i)
{
cal.add(Calendar.DAY_OF_YEAR, 1);
mDateDisplayValues[i] = (String) DateFormat.format("MM.dd EEEE", cal);
}
mDateSpinner.setDisplayedValues(mDateDisplayValues);
mDateSpinner.setValue(7 / 2);
mDateSpinner.invalidate();
}
public interface OnDateTimeChangedListener
{
void onDateTimeChanged(DateTimePicker view, int year, int month, int day,int hour,int minute);
}
public void setOnDateTimeChangedListener(OnDateTimeChangedListener callback)
{
mOnDateTimeChangedListener = callback;
}
private void onDateTimeChanged()
{
if (mOnDateTimeChangedListener != null)
{
mOnDateTimeChangedListener.onDateTimeChanged(this, mDate.get(Calendar.YEAR),
mDate.get(Calendar.MONTH), mDate.get(Calendar.DAY_OF_MONTH),mHour, mMinute);
}
}
}
package com.ycf.blog_05_chinesechoosedemo.datedialog;
import java.util.Calendar;
import com.ycf.blog_05_chinesechoosedemo.datedialog.DateTimePicker.OnDateTimeChangedListener;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.text.format.DateUtils;
public class DateTimePickerDialog extends AlertDialog implements OnClickListener
{
private DateTimePicker mDateTimePicker;
private Calendar mDate = Calendar.getInstance();
private OnDateTimeSetListener mOnDateTimeSetListener;
@SuppressWarnings("deprecation")
public DateTimePickerDialog(Context context, long date)
{
super(context);
mDateTimePicker = new DateTimePicker(context);
setView(mDateTimePicker);
mDateTimePicker.setOnDateTimeChangedListener(new OnDateTimeChangedListener()
{
@Override
public void onDateTimeChanged(DateTimePicker view, int year, int month, int day, int hour, int minute)
{
mDate.set(Calendar.YEAR, year);
mDate.set(Calendar.MONTH, month);
mDate.set(Calendar.DAY_OF_MONTH, day);
mDate.set(Calendar.HOUR_OF_DAY, hour);
mDate.set(Calendar.MINUTE, minute);
mDate.set(Calendar.SECOND, 0);
updateTitle(mDate.getTimeInMillis());
}
});
setButton("设置", this);
setButton2("取消", (OnClickListener)null);
mDate.setTimeInMillis(date);
updateTitle(mDate.getTimeInMillis());
}
public interface OnDateTimeSetListener
{
void OnDateTimeSet(AlertDialog dialog, long date);
}
private void updateTitle(long date)
{
int flag = DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_WEEKDAY| DateUtils.FORMAT_SHOW_TIME;
setTitle(DateUtils.formatDateTime(this.getContext(), date, flag));
}
public void setOnDateTimeSetListener(OnDateTimeSetListener callBack)
{
mOnDateTimeSetListener = callBack;
}
public void onClick(DialogInterface arg0, int arg1)
{
if (mOnDateTimeSetListener != null)
{
mOnDateTimeSetListener.OnDateTimeSet(this, mDate.getTimeInMillis());
}
}
}