package com.todayinfo.ui.component;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.jinghua.todayinformation.R;
import com.todayinfo.controller.NetWorkCenter;
public class DateDialog {
public static Dialog dialog;
private static int START_YEAR = 1900, END_YEAR = 2100, END_MONTH, END_DATE;
static TextView etTemp;
static int year, month, day;
public void showDatePicker(final Context con, final TextView textView) {
if (dialog != null && dialog.isShowing()) {
return;
}
Calendar calendar = Calendar.getInstance();
String timeStamp = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
END_YEAR = Integer.parseInt(timeStamp.substring(0, 4));
END_MONTH = Integer.parseInt(timeStamp.substring(4, 6));
END_DATE = Integer.parseInt(timeStamp.substring(6, 8));
etTemp = textView;
if (etTemp.getText().toString().length() > 0) {
String[] time = etTemp.getText().toString().split("-");
if (time.length == 1 && time[0].equals(etTemp.getText().toString())) {
time = etTemp.getText().toString().split("\\.");
}
year = Integer.parseInt(time[0]);
month = Integer.parseInt(time[1]) - 1;
day = Integer.parseInt(time[2]);
} else {
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH);
day = calendar.get(Calendar.DATE);
}
// 添加大小月月份并将其转换为list,方便之后的判断
String[] months_big = { "1", "3", "5", "7", "8", "10", "12" };
String[] months_little = { "4", "6", "9", "11" };
final List<String> list_big = Arrays.asList(months_big);
final List<String> list_little = Arrays.asList(months_little);
dialog = new Dialog(con, R.style.FullHeightDialog);
// dialog.setTitle("请选择日期");
// 找到dialog的布局文件
LayoutInflater inflater = LayoutInflater.from(con);
View view = inflater.inflate(R.layout.pop_date, null);
Window dialogWindow = dialog.getWindow();
dialogWindow.setGravity(Gravity.BOTTOM);
// 年
final WheelView wv_year = (WheelView) view.findViewById(R.id.year);
wv_year.setAdapter(new NumericWheelAdapter(START_YEAR, END_YEAR));// 设置"年"的显示数据
wv_year.setCyclic(false);// 可循环滚动
wv_year.setLabel("年");// 添加文字
wv_year.setCurrentItem(year - START_YEAR);// 初始化时显示的数据
// 月
final WheelView wv_month = (WheelView) view.findViewById(R.id.month);
wv_month.setAdapter(new NumericWheelAdapter(1, 12));
wv_month.setCyclic(true);
wv_month.setLabel("月");
wv_month.setCurrentItem(month);
// 日
final WheelView wv_day = (WheelView) view.findViewById(R.id.day);
wv_day.setCyclic(true);
// 判断大小月及是否闰年,用来确定"日"的数据
if (list_big.contains(String.valueOf(month + 1))) {
wv_day.setAdapter(new NumericWheelAdapter(1, 31));
} else if (list_little.contains(String.valueOf(month + 1))) {
wv_day.setAdapter(new NumericWheelAdapter(1, 30));
} else {
// 闰年
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
wv_day.setAdapter(new NumericWheelAdapter(1, 29));
else
wv_day.setAdapter(new NumericWheelAdapter(1, 28));
}
wv_day.setLabel("日");
wv_day.setCurrentItem(day - 1);
// 添加"年"监听
OnWheelChangedListener wheelListener_year = new OnWheelChangedListener() {
public void onChanged(WheelView wheel, int oldValue, int newValue) {
int year_num = newValue + START_YEAR;
// 判断大小月及是否闰年,用来确定"日"的数据
if (list_big
.contains(String.valueOf(wv_month.getCurrentItem() + 1))) {
wv_day.setAdapter(new NumericWheelAdapter(1, 31));
} else if (list_little.contains(String.valueOf(wv_month
.getCurrentItem() + 1))) {
wv_day.setAdapter(new NumericWheelAdapter(1, 30));
} else {
if ((year_num % 4 == 0 && year_num % 100 != 0)
|| year_num % 400 == 0) {
wv_day.setAdapter(new NumericWheelAdapter(1, 29));
wv_day.setCurrentItem(0);
} else {
wv_day.setAdapter(new NumericWheelAdapter(1, 28));
wv_day.setCurrentItem(0);
}
}
}
};
// 添加"月"监听
OnWheelChangedListener wheelListener_month = new OnWheelChangedListener() {
public void onChanged(WheelView wheel, int oldValue, int newValue) {
int month_num = newValue + 1;
// 判断大小月及是否闰年,用来确定"日"的数据
if (list_big.contains(String.valueOf(month_num))) {
wv_day.setAdapter(new NumericWheelAdapter(1, 31));
wv_day.setCurrentItem(0);
} else if (list_little.contains(String.valueOf(month_num))) {
wv_day.setAdapter(new NumericWheelAdapter(1, 30));
wv_day.setCurrentItem(0);
} else {
if (((wv_year.getCurrentItem() + START_YEAR) % 4 == 0 && (wv_year
.getCurrentItem() + START_YEAR) % 100 != 0)
|| (wv_year.getCurrentItem() + START_YEAR) % 400 == 0) {
wv_day.setAdapter(new NumericWheelAdapter(1, 29));
wv_day.setCurrentItem(0);
} else {
wv_day.setAdapter(new NumericWheelAdapter(1, 28));
wv_day.setCurrentItem(0);
}
}
}
};
wv_year.addChangingListener(wheelListener_year);
wv_month.addChangingListener(wheelListener_month);
// 根据屏幕密度来指定选择器字体的大
wv_day.TEXT_SIZE = (int) con.getResources().getDimension(R.dimen.dp45);
wv_month.TEXT_SIZE = (int) con.getResources().getDimension(R.dimen.dp45);
wv_year.TEXT_SIZE = (int) con.getResources().getDimension(R.dimen.dp45);
Button btn_sure = (Button) view.findViewById(R.id.btn_datetime_sure);
Button btn_cancel = (Button) view.findViewById(R.id.btn_datetime_cancel);
// 确定
btn_sure.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
String day1 = String.valueOf(wv_day.getCurrentItem() + 1);
String year1 = String.valueOf(wv_year.getCurrentItem() + START_YEAR);
String month1 = String.valueOf(wv_month.getCurrentItem() + 1);
if (month1.length() < 2) {
month1 = 0 + month1;
}
if (day1.length() < 2) {
day1 = 0 + day1;
}
if (END_YEAR > Integer.parseInt(year1)
|| END_YEAR == Integer.parseInt(year1)
&& END_MONTH > Integer.parseInt(month1)
|| END_YEAR == Integer.parseInt(year1)
&& END_MONTH == Integer.parseInt(month1)
&& END_DATE >= Integer.parseInt(day1)) {
if (!NetWorkCenter.isNetworkConnected(con)) {
Toast.makeText(con, "请检查你的网络!", 1).show();
return;
}
etTemp.setText(year1 + "-" + month1 + "-" + day1);
if (listener != null) {
listener.pressDateBtn(R.id.ok_button);
}
dialog.dismiss();
} else {
Toast.makeText(con, "亲,你选择的日期不能晚于今天哦", 1).show();
}
}
});
// 取消
btn_cancel.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
dialog.dismiss();
}
});
// 设置dialog的布局,并显示
dialog.setContentView(view);
dialog.setCancelable(true);
dialog.show();
Window win = dialog.getWindow();
win.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams lp = win.getAttributes();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
win.setAttributes(lp);
}
private DateBtnListener listener;
public interface DateBtnListener {
void pressDateBtn(int id);
}
public void setDateBtnListener(DateBtnListener dateListener) {
this.listener = dateListener;
}
}