日期选择器
来源:互联网 发布:国网电子商务公司知乎 编辑:程序博客网 时间:2024/06/05 03:59
先上最后效果图:
WheelView开源地址:https://github.com/chemalarrea/Android-wheel
部分代码如下(DatePickerDialog.Java):
[java] view plain copy
- package com.ywl5320.pickaddress;
- import java.util.ArrayList;
- import java.util.Calendar;
- import android.app.Activity;
- import android.content.Context;
- import android.os.Bundle;
- import android.util.DisplayMetrics;
- import android.view.Gravity;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.ViewGroup.LayoutParams;
- import android.widget.LinearLayout;
- import android.widget.TextView;
- import com.ywl5320.pickaddress.wheel.widget.adapters.AbstractWheelTextAdapter;
- import com.ywl5320.pickaddress.wheel.widget.views.OnWheelChangedListener;
- import com.ywl5320.pickaddress.wheel.widget.views.OnWheelScrollListener;
- import com.ywl5320.pickaddress.wheel.widget.views.WheelView;
- /**
- * 日期选择对话框
- *
- * @author pengjian
- *
- */
- public class DatePickerDialog extends BaseDialog implements
- android.view.View.OnClickListener {
- private static final int MIN_YEAR = 1970;
- private static final int MAX_YEAR = 2100;
- public static final int DIALOG_MODE_CENTER = 0;
- public static final int DIALOG_MODE_BOTTOM = 1;
- private Context context;
- private WheelView wvYear;
- private WheelView wvMonth;
- private WheelView wvDay;
- private View vDialog;
- private View vDialogChild;
- private ViewGroup VDialogPicker;
- private TextView tvTitle;
- private TextView btnSure;
- private TextView btnCancel;
- private ArrayList<String> arry_years = new ArrayList<String>();
- private ArrayList<String> arry_months = new ArrayList<String>();
- private ArrayList<String> arry_days = new ArrayList<String>();
- private CalendarTextAdapter mYearAdapter;
- private CalendarTextAdapter mMonthAdapter;
- private CalendarTextAdapter mDaydapter;
- private int month;
- private int day;
- private int currentYear = getYear();
- private int currentMonth = getMonth();
- private int currentDay = getDay();
- private int maxTextSize = 24;
- private int minTextSize = 18;
- private boolean issetdata = false;
- private String selectYear;
- private String selectMonth;
- private String selectDay;
- private String strTitle = "选择日期";
- private OnDatePickListener onDatePickListener;
- public DatePickerDialog(Context context) {
- super(context, R.layout.dialog_picker_center);
- this.context = context;
- }
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- init();
- }
- private void init() {
- VDialogPicker = (ViewGroup) findViewById(R.id.ly_dialog_picker);
- LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
- LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT, 1.0f);
- // 此处相当于布局文件中的Android:layout_gravity属性
- lp.gravity = Gravity.CENTER_VERTICAL;
- wvYear = new WheelView(context);
- wvYear.setLayoutParams(lp);
- VDialogPicker.addView(wvYear);
- wvMonth = new WheelView(context);
- wvMonth.setLayoutParams(lp);
- VDialogPicker.addView(wvMonth);
- wvDay = new WheelView(context);
- wvDay.setLayoutParams(lp);
- VDialogPicker.addView(wvDay);
- vDialog = findViewById(R.id.ly_dialog);
- vDialogChild = findViewById(R.id.ly_dialog_child);
- tvTitle = (TextView) findViewById(R.id.tv_dialog_title);
- btnSure = (TextView) findViewById(R.id.btn_dialog_sure);
- btnCancel = (TextView) findViewById(R.id.btn_dialog_cancel);
- tvTitle.setText(strTitle);
- vDialog.setOnClickListener(this);
- vDialogChild.setOnClickListener(this);
- btnSure.setOnClickListener(this);
- if (null != btnCancel) {
- btnCancel.setOnClickListener(this);
- }
- if (!issetdata) {
- initData();
- }
- initYears();
- mYearAdapter = new CalendarTextAdapter(context, arry_years,
- setYear(currentYear), maxTextSize, minTextSize);
- wvYear.setVisibleItems(5);
- wvYear.setViewAdapter(mYearAdapter);
- wvYear.setCurrentItem(setYear(currentYear));
- initMonths(month);
- mMonthAdapter = new CalendarTextAdapter(context, arry_months,
- setMonth(currentMonth), maxTextSize, minTextSize);
- wvMonth.setVisibleItems(5);
- wvMonth.setCyclic(true);
- wvMonth.setViewAdapter(mMonthAdapter);
- wvMonth.setCurrentItem(setMonth(currentMonth));
- initDays(day);
- mDaydapter = new CalendarTextAdapter(context, arry_days,
- currentDay - 1, maxTextSize, minTextSize);
- wvDay.setVisibleItems(5);
- wvDay.setCyclic(true);
- wvDay.setViewAdapter(mDaydapter);
- wvDay.setCurrentItem(currentDay - 1);
- wvYear.addChangingListener(new OnWheelChangedListener() {
- @Override
- public void onChanged(WheelView wheel, int oldValue, int newValue) {
- // TODO Auto-generated method stub
- String currentText = (String) mYearAdapter.getItemText(wheel
- .getCurrentItem());
- selectYear = currentText;
- setTextviewSize(currentText, mYearAdapter);
- currentYear = Integer.parseInt(currentText);
- setYear(currentYear);
- initMonths(month);
- mMonthAdapter = new CalendarTextAdapter(context, arry_months,
- 0, maxTextSize, minTextSize);
- wvMonth.setVisibleItems(5);
- wvMonth.setViewAdapter(mMonthAdapter);
- wvMonth.setCurrentItem(0);
- }
- });
- wvYear.addScrollingListener(new OnWheelScrollListener() {
- @Override
- public void onScrollingStarted(WheelView wheel) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onScrollingFinished(WheelView wheel) {
- // TODO Auto-generated method stub
- String currentText = (String) mYearAdapter.getItemText(wheel
- .getCurrentItem());
- setTextviewSize(currentText, mYearAdapter);
- }
- });
- wvMonth.addChangingListener(new OnWheelChangedListener() {
- @Override
- public void onChanged(WheelView wheel, int oldValue, int newValue) {
- // TODO Auto-generated method stub
- String currentText = (String) mMonthAdapter.getItemText(wheel
- .getCurrentItem());
- selectMonth = currentText;
- setTextviewSize(currentText, mMonthAdapter);
- setMonth(Integer.parseInt(currentText));
- initDays(day);
- mDaydapter = new CalendarTextAdapter(context, arry_days, 0,
- maxTextSize, minTextSize);
- wvDay.setVisibleItems(5);
- wvDay.setViewAdapter(mDaydapter);
- wvDay.setCurrentItem(0);
- }
- });
- wvMonth.addScrollingListener(new OnWheelScrollListener() {
- @Override
- public void onScrollingStarted(WheelView wheel) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onScrollingFinished(WheelView wheel) {
- // TODO Auto-generated method stub
- String currentText = (String) mMonthAdapter.getItemText(wheel
- .getCurrentItem());
- setTextviewSize(currentText, mMonthAdapter);
- }
- });
- wvDay.addChangingListener(new OnWheelChangedListener() {
- @Override
- public void onChanged(WheelView wheel, int oldValue, int newValue) {
- // TODO Auto-generated method stub
- String currentText = (String) mDaydapter.getItemText(wheel
- .getCurrentItem());
- setTextviewSize(currentText, mDaydapter);
- selectDay = currentText;
- }
- });
- wvDay.addScrollingListener(new OnWheelScrollListener() {
- @Override
- public void onScrollingStarted(WheelView wheel) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onScrollingFinished(WheelView wheel) {
- // TODO Auto-generated method stub
- String currentText = (String) mDaydapter.getItemText(wheel
- .getCurrentItem());
- setTextviewSize(currentText, mDaydapter);
- }
- });
- }
- public void initData() {
- setDate(getYear(), getMonth(), getDay());
- }
- public void initYears() {
- for (int i = MIN_YEAR; i < MAX_YEAR; i++) {
- arry_years.add(i + "");
- }
- }
- public void initMonths(int months) {
- arry_months.clear();
- for (int i = 1; i <= months; i++) {
- arry_months.add(i + "");
- }
- }
- public void initDays(int days) {
- arry_days.clear();
- for (int i = 1; i <= days; i++) {
- arry_days.add(i + "");
- }
- }
- /**
- * 设置dialog弹出框模式
- *
- * @param dialogMode
- * @param DIALOG_MODE_CENTER
- * 从屏幕中间弹出
- * @param DIALOG_MODE_BOTTOM
- * 从屏幕底部弹出
- */
- public void setDialogMode(int dialogMode) {
- if (dialogMode == DIALOG_MODE_BOTTOM) {
- resetContent(R.layout.dialog_picker_bottom);
- setAnimation(R.style.AnimationBottomDialog);
- setGravity(Gravity.BOTTOM);
- }
- }
- public void setTitle(String title) {
- this.strTitle = title;
- }
- @Override
- protected int dialogWidth() {
- DisplayMetrics metric = new DisplayMetrics();
- ((Activity) mContext).getWindowManager().getDefaultDisplay()
- .getMetrics(metric);
- return metric.widthPixels;
- }
- public void setDatePickListener(OnDatePickListener onDatePickListener) {
- this.onDatePickListener = onDatePickListener;
- }
- @Override
- public void onClick(View v) {
- if (v == btnSure) {
- if (onDatePickListener != null) {
- onDatePickListener.onClick(selectYear, selectMonth, selectDay);
- }
- } else if (v == btnCancel) {
- } else if (v == vDialogChild) {
- return;
- } else {
- dismiss();
- }
- dismiss();
- }
- public interface OnDatePickListener {
- public void onClick(String year, String month, String day);
- }
- /**
- * 设置字体大小
- *
- * @param curriteItemText
- * @param adapter
- */
- public void setTextviewSize(String curriteItemText,
- CalendarTextAdapter adapter) {
- ArrayList<View> arrayList = adapter.getTestViews();
- int size = arrayList.size();
- String currentText;
- for (int i = 0; i < size; i++) {
- TextView textvew = (TextView) arrayList.get(i);
- currentText = textvew.getText().toString();
- if (curriteItemText.equals(currentText)) {
- textvew.setTextSize(maxTextSize);
- } else {
- textvew.setTextSize(minTextSize);
- }
- }
- }
- public int getYear() {
- Calendar c = Calendar.getInstance();
- return c.get(Calendar.YEAR);
- }
- public int getMonth() {
- Calendar c = Calendar.getInstance();
- return c.get(Calendar.MONTH) + 1;
- }
- public int getDay() {
- Calendar c = Calendar.getInstance();
- return c.get(Calendar.DATE);
- }
- /**
- * 设置年月日
- *
- * @param year
- * @param month
- * @param day
- */
- public void setDate(int year, int month, int day) {
- selectYear = year + "";
- selectMonth = month + "";
- selectDay = day + "";
- issetdata = true;
- this.currentYear = year;
- this.currentMonth = month;
- this.currentDay = day;
- this.month = 12;
- calDays(year, month);
- }
- /**
- * 设置年份
- *
- * @param year
- */
- private int setYear(int year) {
- int yearIndex = 0;
- for (int i = MIN_YEAR; i < MAX_YEAR; i++) {
- if (i == year) {
- return yearIndex;
- }
- yearIndex++;
- }
- return yearIndex;
- }
- /**
- * 设置月份
- *
- * @param year
- * @param month
- * @return
- */
- private int setMonth(int month) {
- int monthIndex = 0;
- calDays(currentYear, month);
- for (int i = 1; i < this.month; i++) {
- if (month == i) {
- return monthIndex;
- } else {
- monthIndex++;
- }
- }
- return monthIndex;
- }
- /**
- * 计算每月多少天
- *
- * @param month
- * @param leayyear
- */
- public void calDays(int year, int month) {
- boolean leayyear = false;
- if (year % 4 == 0 && year % 100 != 0) {
- leayyear = true;
- } else {
- leayyear = false;
- }
- for (int i = 1; i <= 12; i++) {
- switch (month) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- this.day = 31;
- break;
- case 2:
- if (leayyear) {
- this.day = 29;
- } else {
- this.day = 28;
- }
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- this.day = 30;
- break;
- }
- }
- if (year == getYear() && month == getMonth()) {
- this.day = getDay();
- }
- }
- private class CalendarTextAdapter extends AbstractWheelTextAdapter {
- ArrayList<String> list;
- protected CalendarTextAdapter(Context context, ArrayList<String> list,
- int currentItem, int maxsize, int minsize) {
- super(context, R.layout.item_birth_year, NO_RESOURCE, currentItem,
- maxsize, minsize);
- this.list = list;
- setItemTextResource(R.id.tempValue);
- }
- @Override
- public View getItem(int index, View cachedView, ViewGroup parent) {
- View view = super.getItem(index, cachedView, parent);
- return view;
- }
- @Override
- public int getItemsCount() {
- return list.size();
- }
- @Override
- protected CharSequence getItemText(int index) {
- return list.get(index) + "";
- }
- }
- }
DEMO下载地址:http://download.csdn.net/download/pengjian1993/9084995
0 0
- 日期选择器
- 日期选择器
- 日期选择器
- 日期选择器
- 日期选择器
- 日期选择器
- 地址选择器,日期选择器
- 时间选择器和日期选择器
- Android 日期选择器、日期范围选择器:MaterialDateRangePicker
- JS日期选择器
- java Swing 日期选择器
- javascript日期选择器
- 一个日期联动选择器
- 牛人写的日期选择器
- 日期联动选择器
- jsp日期选择器
- JavaScript 日期联动选择器
- 很好的日期选择器
- 将 ndk-build 库添加到 Android Studio 项目中
- 测试版
- SpringMVC学习总结(六).异常处理解析器
- Android内存优化工具(四)LeakCanary
- 【LeetCode】258. Add Digits
- 日期选择器
- centos 编译php5
- 【Android应用开发技术:用户界面】自定义View类设计
- QQ空间时光轴特效
- Leetcode解题报告:279. Perfect Squares
- Unity生成二维码功能
- 数据库并集union、交集intersect、差集except
- 【LeetCode】241. Different Ways to Add Parentheses
- Docker-compose 到 Kubernetes 的迁移工具!