用AndroidWheel自定义DatePicker及DatePickerDialog

自定义DatePicker及DatePickerDialog

利用开源项目AndroidWheel,地址:https://code.google.com/p/android-wheel/,自定义DatePicker及DatePickerDialog

CustomDatePicker布局===”vertical”android:gravity=”center” ><LinearLayout=”center”android:orientation=”horizontal” ><com.example.testapp.wheel.WheelVerticalView==”4″ /><com.example.testapp.wheel.WheelVerticalView==”4″ /><com.example.testapp.wheel.WheelVerticalView==>CustomDatePicker代码import java.util.ArrayList;import java.util.Calendar;import java.util.List;import com.example.testapp.R;import com.example.testapp.wheel.AbstractWheel;import com.example.testapp.wheel.AbstractWheelTextAdapter;import com.example.testapp.wheel.ArrayWheelAdapter;import com.example.testapp.wheel.OnWheelScrollListener;import com.example.testapp.wheel.WheelVerticalView;import android.content.Context;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.widget.LinearLayout;import android.widget.Toast;{private WheelVerticalView year;private WheelVerticalView month;private WheelVerticalView day;private ChangingListener listener;private ArrayWheelAdapter adapter3;private Context context;private Calendar select_date;private Calendar now_date;public CustomDatePicker(final Context context, AttributeSet attrs) {super(context, attrs);this.context = context;View v = LayoutInflater.from(context).inflate(R.layout.custom_datepicker, null);year = (WheelVerticalView) v.findViewById(R.id.year);month = (WheelVerticalView) v.findViewById(R.id.month);day = (WheelVerticalView) v.findViewById(R.id.day);ArrayList<String> yearlist = new ArrayList<String>();ArrayList<String> monthlist = new ArrayList<String>();for (int i = 1901; i < 2900; i++) {yearlist.add(i + “年”);}for (int i = 1; i <= 12; i++) {monthlist.add(i + “月”);}ArrayWheelAdapter adapter1 = new ArrayWheelAdapter(context,yearlist.toArray());ArrayWheelAdapter adapter2 = new ArrayWheelAdapter(context,monthlist.toArray());adapter3 = new ArrayWheelAdapter(context, getDaylist(31).toArray());setTextColor(adapter1);setTextColor(adapter2);setTextColor(adapter3);year.setViewAdapter(adapter1);month.setViewAdapter(adapter2);day.setViewAdapter(adapter3);year.setCyclic(true);month.setCyclic(true);day.setCyclic(true);setDate(Calendar.getInstance());OnWheelScrollListener scrollListener = new OnWheelScrollListener() {(AbstractWheel wheel) {select_date = getDate();}(AbstractWheel wheel) {if (now_date != null) {Calendar date = getDate();int compareTo = date.compareTo(now_date);if (compareTo < 0) {setDate(select_date);Toast.makeText(getContext(), “不能选择此日期”,Toast.LENGTH_SHORT).show();}}setDayAdapter();}};OnWheelScrollListener scrollListener1 = new OnWheelScrollListener() {(AbstractWheel wheel) {select_date = getDate();}(AbstractWheel wheel) {if (now_date != null) {Calendar date = getDate();int compareTo = date.compareTo(now_date);if (compareTo < 0) {setDate(select_date);Toast.makeText(getContext(), “不能选择此日期”,Toast.LENGTH_SHORT).show();}}doListener();}};month.addScrollingListener(scrollListener);year.addScrollingListener(scrollListener);day.addScrollingListener(scrollListener1);addView(v);}private List getDaylist(int num) {ArrayList<String> list = new ArrayList<String>();for (int i = 1; i <= num; i++) {String d = i + “日”;if (i < 10) {d = “\t” + i + “日”;}list.add(d);}return list;}() {if (listener != null) {listener.onChange(getDate());}}{void onChange(Calendar c);}() {int currentItem = year.getCurrentItem();int current = currentItem + 1901;int newValue = month.getCurrentItem() + 1;switch (newValue) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:adapter3 = new ArrayWheelAdapter(context, getDaylist(31).toArray());break;case 2:if (current % 4 == 0) {adapter3 = new ArrayWheelAdapter(context, getDaylist(29).toArray());} else {adapter3 = new ArrayWheelAdapter(context, getDaylist(28).toArray());}break;case 4:case 6:case 9:case 11:adapter3 = new ArrayWheelAdapter(context, getDaylist(30).toArray());break;default:break;}day.setViewAdapter(adapter3);setTextColor(adapter3);doListener();}/*** 设置初始日期** @param c*/(Calendar c) {int y = c.get(Calendar.YEAR);int index1 = y – 1901;year.setCurrentItem(index1);int m = c.get(Calendar.MONTH);month.setCurrentItem(m);int d = c.get(Calendar.DAY_OF_MONTH);setDayAdapter();day.setCurrentItem(d – 1);}/*** 设置字体颜色** @param adapter*/(AbstractWheelTextAdapter adapter) {adapter.setTextColor(context.getResources().getColor(R.color.blue));}/*** 设置限制日期,,设置后,不能选择设置的开始日期以前的日期** @param c*/(Calendar c) {now_date = c;}/*** 得到日期** @return*/public Calendar getDate() {int y = year.getCurrentItem();int index1 = y + 1901;int m = month.getCurrentItem();int d = day.getCurrentItem();Calendar c = Calendar.getInstance();c.set(index1, m, d + 1);return c;}/*** 设置日期改变的监听** @param listener*/(ChangingListener listener) {this.listener = listener;}}CustomDatePickerDialog布局===”@drawable/white_round_shape”android:orientation=”vertical” ><TextView===”@color/black”android:textSize=”18sp” /><View=”@color/blue” /><LinearLayout=”center”android:orientation=”horizontal” ><TextView===”15sp” /></LinearLayout><com.example.testapp.view.CustomDatePicker=”wrap_content”android:layout_gravity=”center” /><LinearLayout===”10dp”android:paddingTop=”10dp” ><TextView===”@color/yellow2gray_selector”android:textSize=”18sp” /><TextView====>CustomDatePickerDialog代码import java.text.SimpleDateFormat;import java.util.Calendar;import com.example.testapp.R;import com.example.testapp.view.CustomDatePicker.ChangingListener;import android.app.Dialog;import android.content.Context;import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.view.View;import android.widget.TextView;{private TextView tv_sure;private TextView tv_cancel;private onDateListener listener;private Calendar c = Calendar.getInstance();private CustomDatePicker cdp;public CustomDatePickerDialog(Context context, Calendar c) {super(context, R.style.CustomDialog);this.c = c;}(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.custom_datepicker_dialog);getWindow().setBackgroundDrawable(new BitmapDrawable());setCanceledOnTouchOutside(true);TextView tv_dialog_title = (TextView) findViewById(R.id.tv_dialog_title);final TextView tv_dialog_content = (TextView) findViewById(R.id.tv_dialog_content);tv_sure = (TextView) findViewById(R.id.tv_sure);tv_cancel = (TextView) findViewById(R.id.tv_cancel);cdp = (CustomDatePicker) findViewById(R.id.cdp);cdp.setDate(c);SimpleDateFormat sdfFrom = new SimpleDateFormat(“yyyy年MM月dd日 E”);String string = sdfFrom.format(c.getTime());tv_dialog_content.setText(string);cdp.addChangingListener(new ChangingListener() {(Calendar c1) {c = c1;SimpleDateFormat sdfFrom = new SimpleDateFormat(“yyyy年MM月dd日 E”);String string = sdfFrom.format(c.getTime());tv_dialog_content.setText(string);}});View.OnClickListener clickListener = new View.OnClickListener() {(View v) {if (v == tv_sure) {if (listener != null) {listener.dateFinish(c);}}dismiss();}};tv_sure.setOnClickListener(clickListener);tv_cancel.setOnClickListener(clickListener);}/*** 设置限制日期,设置后,不能选择设置的开始日期以前的日期** @param c*/(Calendar c) {cdp.setNowData(c);}/*** 设置点击确认的事件** @param listener*/(onDateListener listener) {this.listener = listener;}{void dateFinish(Calendar c);}}使用方法(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.tv_click).setOnClickListener(new OnClickListener() {(View arg0) {CustomDatePickerDialog dialog = new CustomDatePickerDialog(MainActivity.this, Calendar.getInstance());dialog.addDateListener(new onDateListener() {(Calendar c) {Toast.makeText(getApplicationContext(), c.getTime().toLocaleString(), Toast.LENGTH_SHORT).show();}});dialog.show();}});CustomDatePicker cdp = (CustomDatePicker) findViewById(R.id.cdp);cdp.addChangingListener(new ChangingListener() {(Calendar c) {Toast.makeText(getApplicationContext(), c.getTime().toLocaleString(), Toast.LENGTH_SHORT).show();}});}运行效果:不要因为生活琐事而烦恼,不要因为儿女情长而忧愁,

用AndroidWheel自定义DatePicker及DatePickerDialog

相关文章:

你感兴趣的文章:

标签云: