Android(安卓)自定义日期和时间和星期的弹窗
16lz
2022-01-27
public class MainActivity extends Activity implements OnClickListener {// 文本日期private TextView tvEndDate;private TextView tvEndTime;private Button button1;private Button button2; private Intent localIntent;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.act_time_picker);tvEndDate = (TextView) findViewById(R.id.lv_publish_end_date_tv);tvEndTime = (TextView) findViewById(R.id.lv_publish_end_time_tv);initDataAndTime(tvEndDate, tvEndTime);button1 = (Button) findViewById(R.id.button1);button2 = (Button) findViewById(R.id.button2);button1.setOnClickListener(this);button2.setOnClickListener(this);}/** * 初始化日期和时间 (定位时间到每周周五) * * @param paramTextView1 * @param paramTextView2 */public void initDataAndTime(TextView paramTextView1, TextView paramTextView2) {Calendar localCalendar1 = Calendar.getInstance();int i = localCalendar1.get(1);int j = localCalendar1.get(2);int k = localCalendar1.get(5);int m = -1 + (7 + localCalendar1.get(5) - localCalendar1.get(7));int n = localCalendar1.get(11);if (((k == m) && (n >= 18)) || (k > m)) {m = -1 + (14 + localCalendar1.get(5) - localCalendar1.get(7));}if (m > DateTimeUtility.getDaysOfCurrentMonth()) {if (j + 1 >= 12) {i++;}Calendar localCalendar2 = DateTimeUtility.convertDateToCalendar(DateTimeUtility.covertStringToDate(i+ "-" + (j + 1) + "-" + m + " " + 18 + ":00","yyyy-MM-dd HH:mm"));j = localCalendar2.get(2);m = localCalendar2.get(5);}paramTextView1.setText(i + "-" + (j + 1) + "-" + m);paramTextView2.setText(18 + ":" + "00");}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button1:localIntent = new Intent(this, DateTimePickerActivity.class);localIntent.putExtra("date", tvEndDate.getText().toString() + " "+ tvEndTime.getText().toString());localIntent.putExtra("time", false);startActivityForResult(localIntent, 1003);break;case R.id.button2:localIntent = new Intent(this, DateTimePickerActivity.class);localIntent.putExtra("date", tvEndDate.getText().toString() + " "+ tvEndTime.getText().toString());localIntent.putExtra("time", true);startActivityForResult(localIntent, 1003);break;default:break;}}/** * 返回的结果 */@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);int k;if (resultCode == -1) {if (requestCode != 1003) {return;}k = data.getIntExtra("isTime", 0);if (k == 2) {String endDate = data.getStringExtra("Day");tvEndDate.setText(endDate);}if (k == 1) {String endTime = data.getStringExtra("Times");tvEndTime.setText(endTime);}}}}
public class DateTimePickerActivity extends Activity implements OnClickListener {protected String className = this.getClass().getName();private static final int theEndOfTheDay = 18;private static final int theNoonOfTheDay = 12;private Calendar calendar;private DatePicker datePicker;private int day;private int hourOfDay;private boolean isTime;private int minute;private int month;private TimePicker timePicker;private String[] weekDays;private int year;String str;// ----------------------------------------------private Button timeMakeSure;private Button timeNoon;private Button timeAfterNoon;private NumberPicker npTimeWeek;// -----------------------------------------------private Button dateMakeSure;private Button today;private Button tomorrow;private Button thisWeek;private NumberPicker npDateWeek;private String[] arrayOfStrings;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);initView();initData();initEvent();}private void initView() {showAsPopup(this);this.isTime = getIntent().getBooleanExtra("time", false);System.out.println("时间" + isTime);if (this.isTime) {System.out.println("如何不是时间-------");findViewById(R.id.day_group).setVisibility(View.VISIBLE);findViewById(R.id.time_group).setVisibility(View.GONE);}this.weekDays = getResources().getStringArray(R.array.week_day);this.npDateWeek = (NumberPicker) findViewById(R.id.np_date_week);this.npDateWeek.setMinValue(0);this.npDateWeek.setMaxValue(0);this.npDateWeek.setDisplayedValues(null);this.npTimeWeek = (NumberPicker) findViewById(R.id.np_time_week);this.npTimeWeek.setMinValue(0);this.npTimeWeek.setMaxValue(0);this.npTimeWeek.setDisplayedValues(null);this.datePicker = ((DatePicker) findViewById(R.id.date_pick));this.timePicker = ((TimePicker) findViewById(R.id.time_pick));timeMakeSure = (Button) findViewById(R.id.pick_time_make_sure);timeNoon = (Button) findViewById(R.id.time_noon);timeAfterNoon = (Button) findViewById(R.id.time_afternoon);// npTimeWeek = (NumberPicker) findViewById(R.id.np_time_week);// --------------------------------------------------------------dateMakeSure = (Button) findViewById(R.id.pick_date_make_sure);today = (Button) findViewById(R.id.today);tomorrow = (Button) findViewById(R.id.tomorrow);thisWeek = (Button) findViewById(R.id.this_week);/** * 关闭可编辑模式 */npTimeWeek.setDescendantFocusability(DatePicker.FOCUS_BLOCK_DESCENDANTS);npDateWeek.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);datePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);timePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);}protected void initData() {str = getIntent().getStringExtra("date");System.out.println("得到的时间为:" + str + className);if (!TextUtils.isEmpty(str)) {initDateWeek(str);deteAndTimePickerChange();}}protected void initEvent() {try {/** * 通过反射获取到日期 */Class localClass = this.datePicker.getClass();Class[] arrayOfClass = new Class[1];arrayOfClass[0] = Boolean.TYPE;@SuppressWarnings("unchecked")Method localMethod = localClass.getMethod("setCalendarViewShown",arrayOfClass);DatePicker localDatePicker = this.datePicker;Object[] arrayOfObject = new Object[1];arrayOfObject[0] = Boolean.valueOf(false);localMethod.invoke(localDatePicker, arrayOfObject);if (this.isTime) {this.timePicker.setVisibility(View.VISIBLE);this.datePicker.setVisibility(View.GONE);timeMakeSure.setOnClickListener(this);timeNoon.setOnClickListener(this);timeAfterNoon.setOnClickListener(this);findViewById(R.id.day_group).setVisibility(View.GONE);findViewById(R.id.time_group).setVisibility(View.VISIBLE);this.calendar = DateTimeUtility.convertDateToCalendar(DateTimeUtility.covertStringToDate(str, "yyyy-MM-dd HH:mm"));} else {dateMakeSure.setOnClickListener(this);today.setOnClickListener(this);tomorrow.setOnClickListener(this);thisWeek.setOnClickListener(this);}} catch (Exception localException) {//this.timePicker.setVisibility(View.VISIBLE);this.datePicker.setVisibility(View.GONE);}}/** * 设置星期几 */private void setWeekDate() {try {this.calendar = DateTimeUtility.convertDateToCalendar(DateTimeUtility.covertStringToDate(this.year + "-" + (1 + this.month) + "-" + this.day+ " " + this.hourOfDay + ":00","yyyy-MM-dd HH:mm"));int i = this.calendar.get(7);NumberPicker localNumberPicker = this.npDateWeek;arrayOfStrings = new String[1];arrayOfStrings[0] = this.weekDays[(i - 1)];localNumberPicker.setDisplayedValues(arrayOfStrings);System.out.println(arrayOfStrings[0] + className + "设置星期几的方法----");} catch (Exception localException) {localException.printStackTrace();}}/** * 显示popWindow * * @param paramActivity */public static void showAsPopup(Activity paramActivity) {paramActivity.getWindow().setFlags(2, 2);WindowManager.LayoutParams localLayoutParams = paramActivity.getWindow().getAttributes();localLayoutParams.height = -1;localLayoutParams.width = -1;localLayoutParams.alpha = 1.0F;localLayoutParams.dimAmount = 0.5F;paramActivity.getWindow().setAttributes(localLayoutParams);paramActivity.setContentView(R.layout.picker_date_time);}/** * 日期和时间改变时的方法 */private void deteAndTimePickerChange() {this.datePicker.init(this.year, this.month, this.day,new DatePicker.OnDateChangedListener() {public void onDateChanged(DatePicker view, int years,int monthOfYear, int dayOfMonth) {year = years;month = monthOfYear;day = dayOfMonth;System.out.println(years + "-" + monthOfYear + "-"+ dayOfMonth + "deteAndTimePickerChange调用了。。。");DateTimePickerActivity.this.setWeekDate();}});this.timePicker.setIs24HourView(Boolean.valueOf(true));this.timePicker.setCurrentHour(Integer.valueOf(this.hourOfDay));this.timePicker.setCurrentMinute(Integer.valueOf(this.minute));this.timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {public void onTimeChanged(TimePicker view, int hourOfDays,int minutes) {hourOfDay = hourOfDays;minute = minutes;System.out.println(hourOfDay + ":" + minute+ "setOnTimeChangedListener调用了。。。");}});if (Build.VERSION.SDK_INT < 11) {}}/** * 时间按钮确定的点击事件 */private void makeSureTimeOnClick() {Intent localIntent = new Intent();StringBuilder localStringBuilder = new StringBuilder().append(hourOfDay).append(":");System.out.println(localStringBuilder.toString() + className);if (minute < 10) {String localObject = "0" + minute;localStringBuilder.append(localObject);localIntent.putExtra("Times", localStringBuilder.toString());}// System.out.println(className + "------点击确定后输出的日期为------" + year +// "-"+ (1 + month) + "-" + day);localIntent.putExtra("isTime", 1);setResult(-1, localIntent);finish();}/** * 确定点击时的响应 */private void makeSureDateOnClick() {Intent localIntent = new Intent();localIntent.putExtra("Day", year + "-" + (1 + month) + "-" + day);System.out.println(className + "------点击确定后输出的日期为------" + year + "-"+ (1 + month) + "-" + day);localIntent.putExtra("isTime", 2);setResult(-1, localIntent);finish();}/** * 本周按钮被点击 */private void thisWeekButtonClick() {Calendar localCalendar1 = Calendar.getInstance();int i = localCalendar1.get(1);int j = localCalendar1.get(2);int k = -1 + (7 + localCalendar1.get(5) - localCalendar1.get(7));int m = localCalendar1.get(11);int n = localCalendar1.get(5);if (((n == k) && (m >= 18)) || (n > k)) {k = -1 + (14 + localCalendar1.get(5) - localCalendar1.get(7));}if (k > DateTimeUtility.getDaysOfCurrentMonth()) {if (j + 1 >= 12) {i++;}Calendar localCalendar2 = DateTimeUtility.convertDateToCalendar(DateTimeUtility.covertStringToDate(i+ "-" + (j + 1) + "-" + k + " " + 18 + ":00","yyyy-MM-dd HH:mm"));j = localCalendar2.get(2);k = localCalendar2.get(5);}datePicker.updateDate(i, j, k);}/** * 明天按钮的点击 */private void tomorrowButtonClick() {Calendar localCalendar1 = Calendar.getInstance();int i = localCalendar1.get(1);int j = localCalendar1.get(2);int k = 1 + localCalendar1.get(5);if (k > DateTimeUtility.getDaysOfCurrentMonth()) {if (j + 1 >= 12) {i++;}Calendar localCalendar2 = DateTimeUtility.convertDateToCalendar(DateTimeUtility.covertStringToDate(i+ "-" + (j + 1) + "-" + k + " " + 18 + ":00","yyyy-MM-dd HH:mm"));j = localCalendar2.get(2);k = localCalendar2.get(5);}datePicker.updateDate(i, j, k);}/** * 今天按钮被点击 */private void todayButtonClick() {Calendar localCalendar = Calendar.getInstance();int i = localCalendar.get(1);int j = localCalendar.get(2);int k = localCalendar.get(5);datePicker.updateDate(i, j, k);}/** * 下班按钮被点击 */private void timeAfterNoonClick() {Calendar localCalendar = Calendar.getInstance();localCalendar.get(1);localCalendar.get(2);localCalendar.get(5);timePicker.setCurrentHour(Integer.valueOf(18));timePicker.setCurrentMinute(Integer.valueOf(0));}/** * 中午按钮被点击 */private void timeNoonClick() {Calendar localCalendar = Calendar.getInstance();localCalendar.get(1);localCalendar.get(2);localCalendar.get(5);timePicker.setCurrentHour(Integer.valueOf(12));timePicker.setCurrentMinute(Integer.valueOf(0));}/** * 初始化星期几 */private void initDateWeek(String dateAndTime) {String date = spliteString(dateAndTime, " ", "index", "front"); // 日期String time = spliteString(dateAndTime, " ", "index", "back"); // 时间year = Integer.parseInt(spliteString(date, "-", "index", "front")); // 年份String monthAndDay = spliteString(date, "-", "index", "back"); // 月日month = Integer.parseInt(spliteString(monthAndDay, "-", "index","front")) - 1; // 月day = Integer.parseInt(spliteString(monthAndDay, "-", "index", "back")); // 日hourOfDay = Integer.parseInt(spliteString(time, ":", "index", "front")); // 时minute = Integer.parseInt(spliteString(time, ":", "index", "back")); // 分Calendar cal = Calendar.getInstance();cal.set(Calendar.YEAR, year);cal.set(Calendar.MONTH, month);cal.set(Calendar.DAY_OF_MONTH, day);int i = cal.get(7);// 设置数字选择器的值NumberPicker localNumberPicker = this.npDateWeek;String[] arrayOfString = new String[1];arrayOfString[0] = this.weekDays[(i - 1)];// System.out.println(arrayOfString[0] + "======初始化星期几的方法=======");localNumberPicker.setDisplayedValues(arrayOfString);npTimeWeek.setDisplayedValues(arrayOfString);}/** * 截取子串 * * @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;}protected void onDestroy() {this.datePicker = null;this.timePicker = null;super.onDestroy();}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.pick_time_make_sure:makeSureTimeOnClick();break;case R.id.time_noon:timeNoonClick();break;case R.id.time_afternoon:timeAfterNoonClick();break;case R.id.pick_date_make_sure:makeSureDateOnClick();break;case R.id.today:todayButtonClick();break;case R.id.tomorrow:tomorrowButtonClick();break;case R.id.this_week:thisWeekButtonClick();break;}}}
public class DateTimeUtility {public static final long MILLISECONDS_PER_DAY = 86400000L;public static final long MILLISECONDS_PER_HOUR = 3600000L;public static final long MILLISECONDS_PER_MIN = 60000L;public static final long MILLISECONDS_PER_SECOND = 1000L;private static int _localTimeZoneOffsetInMilliseconds = TimeZone.getDefault().getRawOffset();private static final String _standardFormat = "yyyy-MM-dd HH:mm:ss";private static final String _standardFormat_ms = "yyyy-MM-dd HH:mm:ss.SSS";/** * 转换日期成日历 * * @param paramDate * @return */public static Calendar convertDateToCalendar(Date paramDate) {Calendar localCalendar = Calendar.getInstance();localCalendar.setTime(paramDate);return localCalendar;}/** * 转换本地到世界时间 * * @param paramDate * @return */public static Date convertLocalToUtc(Date paramDate) {return new Date(paramDate.getTime()- _localTimeZoneOffsetInMilliseconds);}/** * 转换字符串成国内日期 * * @param paramString1 * @param paramString2 * @return */private static Date convertStringToDateInternal(String paramString1,String paramString2) {SimpleDateFormat localSimpleDateFormat = new SimpleDateFormat(paramString2);try {Date localDate = localSimpleDateFormat.parse(paramString1);return localDate;} catch (ParseException localParseException) {}return null;}/** * 转换国际时间成本地 * * @param paramDate * @return */public static Date convertUtcToLocal(Date paramDate) {return new Date(paramDate.getTime()+ _localTimeZoneOffsetInMilliseconds);}public static Date covertStringFromUtcStringDataToGmtDate(String paramString) {return convertUtcToLocal(covertStringToDate(paramString));}/** * 转换字符串成日期 * * @param paramString * @return */public static Date covertStringToDate(String paramString) {if (TextUtils.isEmpty(paramString)) {return null;}return convertStringToDateInternal(paramString, "yyyy-MM-dd HH:mm:ss");}/** * 转换字符串成日期 * * @param paramString1 * @param paramString2 * @return */public static Date covertStringToDate(String paramString1,String paramString2) {if (TextUtils.isEmpty(paramString1)) {return null;}return convertStringToDateInternal(paramString1, paramString2);}public static Date covertStringToDateWithMs(String paramString) {int i = paramString.length();if ((TextUtils.isEmpty(paramString)) && (i <= 4)) {return null;}if (paramString.charAt(i - 4) == '.') {return convertStringToDateInternal(paramString,"yyyy-MM-dd HH:mm:ss.SSS");}return convertStringToDateInternal(paramString, "yyyy-MM-dd HH:mm:ss");}public static long getDateDiffInDays(Date paramDate1, Date paramDate2) {return getDateDiffInMilliSeconds(paramDate1, paramDate2) / 86400000L;}public static long getDateDiffInHours(Date paramDate1, Date paramDate2) {return getDateDiffInMilliSeconds(paramDate1, paramDate2) / 3600000L;}public static long getDateDiffInMilliSeconds(Date paramDate1,Date paramDate2) {Calendar localCalendar1 = convertDateToCalendar(paramDate1);Calendar localCalendar2 = convertDateToCalendar(paramDate2);return localCalendar1.getTimeInMillis()- localCalendar2.getTimeInMillis();}public static long getDateDiffInSeconds(Date paramDate1, Date paramDate2) {return getDateDiffInMilliSeconds(paramDate1, paramDate2) / 1000L;}public static String getDateTimeString(Date paramDate) {return getDateTimeString(paramDate, "yyyy-MM-dd HH:mm:ss");}@SuppressLint("SimpleDateFormat")public static String getDateTimeString(Date paramDate, String paramString) {return new SimpleDateFormat(paramString).format(paramDate);}public static String getDateTimeStringWithMs(Date paramDate) {return getDateTimeString(paramDate, "yyyy-MM-dd HH:mm:ss.SSS");}public static int getDaysOfCurrentMonth() {Calendar localCalendar = Calendar.getInstance();localCalendar.set(5, 1);localCalendar.roll(5, -1);return localCalendar.get(5);}public static int getDaysOfYearMonth(int paramInt1, int paramInt2) {Calendar localCalendar = Calendar.getInstance();localCalendar.set(1, paramInt1);localCalendar.set(2, paramInt2 - 1);localCalendar.set(5, 1);localCalendar.roll(5, -1);return localCalendar.get(5);}}
代码很简单,注释也写得比较清楚,我就不做过多赘述。
代码下载 http://download.csdn.net/detail/developandroid/9390047
更多相关文章
- Android(安卓)自定义PopupWindow动画效果
- android 点击屏幕关闭 软键盘
- Android(安卓)日期工具类DateUtil
- Android(安卓)Studio RadioGroup判断点击按钮
- Android里面WebView加载HTML里面点击按钮调我Android方法
- Android点击通知栏返回正在运行的Activity
- Android(安卓)点击按钮,文字改变颜色
- android 使用动画 Button移动后不响应点击事件的解决办法
- Android(安卓)webview 点击超链接打开新的webview