选择年月日控件YMDatePickerDialog
来源:互联网 发布:食品安全网络知识竞赛 编辑:程序博客网 时间:2024/06/06 04:21
import android.content.Context;import android.content.DialogInterface;import android.content.res.Resources;import android.os.Build;import android.os.Bundle;import android.support.v7.app.AlertDialog;import android.view.LayoutInflater;import android.view.View;import android.widget.DatePicker;import com.example.win.newintern3.R;import java.lang.reflect.Field;/** * 只允许选择年月 * Created by TAO_SX on 2016/7/13/013. */public class YMDatePickerDialog extends AlertDialog implements DialogInterface.OnClickListener, DatePicker.OnDateChangedListener { private static final String START_YEAR = "start_year"; private static final String START_MONTH = "start_month"; private static final String START_DAY = "start_day"; private final DatePicker mDatePickerStart; private final OnDateSetListener mCallBack; public interface OnDateSetListener { void onDateSet(DatePicker startDatePicker, int startYear, int startMonthOfYear, int startDayOfMonth); } //showmd = 1;//1为显示年,0为只显示年月 public YMDatePickerDialog(Context context, int showmd, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) { this(context,0, showmd, callBack, year, monthOfYear, dayOfMonth,0,0); } public YMDatePickerDialog(Context context, int showmd, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth, Long min, Long max) { this(context,0, showmd, callBack, year, monthOfYear, dayOfMonth,min,max); } public YMDatePickerDialog(Context context, int theme, int showmd, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth, long min, long max) { super(context, theme); mCallBack = callBack; Context themeContext = getContext(); setButton(BUTTON_POSITIVE, "确 定", this); setButton(BUTTON_NEGATIVE, "取 消", this); setIcon(0); LayoutInflater inflater = (LayoutInflater) themeContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate( R.layout.dialog_date_picker, null); setView(view); mDatePickerStart = (DatePicker) view.findViewById(R.id.datePickerStart); if (min > 0) { mDatePickerStart.setMinDate(min); } if (max > 0) { mDatePickerStart.setMaxDate(max); } mDatePickerStart.init(year, monthOfYear, dayOfMonth, this); switch (showmd) { case 1: hideMonth(mDatePickerStart); case 0: hideDay(mDatePickerStart); break; default: break; } } private void hideDay(DatePicker mDatePicker) { try { /* 处理android5.0以上的特殊情况 */ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { int daySpinnerId = Resources.getSystem().getIdentifier("day", "id", "android"); if (daySpinnerId != 0) { View daySpinner = mDatePicker.findViewById(daySpinnerId); if (daySpinner != null) { daySpinner.setVisibility(View.GONE); } } } else { Field[] datePickerfFields = mDatePicker.getClass().getDeclaredFields(); for (Field datePickerField : datePickerfFields) { if ("mDaySpinner".equals(datePickerField.getName()) || ("mDayPicker").equals(datePickerField.getName())) { datePickerField.setAccessible(true); Object dayPicker = new Object(); try { dayPicker = datePickerField.get(mDatePicker); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } ((View) dayPicker).setVisibility(View.GONE); } } } } catch (Exception e) { e.printStackTrace(); } } private void hideMonth(DatePicker mDatePicker) { try { /* 处理android5.0以上的特殊情况 */ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { int monthSpinnerId = Resources.getSystem().getIdentifier("month", "id", "android"); if (monthSpinnerId != 0) { View monthSpinner = mDatePicker.findViewById(monthSpinnerId); if (monthSpinner != null) { monthSpinner.setVisibility(View.GONE); } } } else { Field[] datePickerfFields = mDatePicker.getClass().getDeclaredFields(); for (Field datePickerField : datePickerfFields) { if ("mMonthSpinner".equals(datePickerField.getName()) || ("mMonthPicker").equals(datePickerField.getName())) { datePickerField.setAccessible(true); Object monthPicker = new Object(); try { monthPicker = datePickerField.get(mDatePicker); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } ((View) monthPicker).setVisibility(View.GONE); } } } } catch (Exception e) { e.printStackTrace(); } } public void onClick(DialogInterface dialog, int which) { if (which == BUTTON_POSITIVE) tryNotifyDateSet(); } @Override public void onDateChanged(DatePicker view, int year, int month, int day) { if (view.getId() == R.id.datePickerStart) mDatePickerStart.init(year, month, day, this); } public DatePicker getDatePickerStart() { return mDatePickerStart; } public void updateStartDate(int year, int monthOfYear, int dayOfMonth) { mDatePickerStart.updateDate(year, monthOfYear, dayOfMonth); } private void tryNotifyDateSet() { if (mCallBack != null) { mDatePickerStart.clearFocus(); mCallBack.onDateSet(mDatePickerStart, mDatePickerStart.getYear(), mDatePickerStart.getMonth(), mDatePickerStart.getDayOfMonth()); } } @Override protected void onStop() { super.onStop(); } @Override public Bundle onSaveInstanceState() { Bundle state = super.onSaveInstanceState(); state.putInt(START_YEAR, mDatePickerStart.getYear()); state.putInt(START_MONTH, mDatePickerStart.getMonth()); state.putInt(START_DAY, mDatePickerStart.getDayOfMonth()); return state; } @Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); int start_year = savedInstanceState.getInt(START_YEAR); int start_month = savedInstanceState.getInt(START_MONTH); int start_day = savedInstanceState.getInt(START_DAY); mDatePickerStart.init(start_year, start_month, start_day, this); }}
阅读全文
0 0
- 选择年月日控件YMDatePickerDialog
- 用三个DropDownList控件选择年月日【转】
- daterangepicker控件选择年月日时分秒
- ASP.NET中用三个DropDownList控件方便的选择年月日
- Jquery--年月日级联选择
- js年月日(生日)选择
- 选择年月日的方法
- 联动的年月日控件
- 在ASP.NET中用三个DropDownList控件方便的选择年月日【原创】
- 在ASP.NET中用三个DropDownList控件方便的选择年月日
- 在ASP.NET中用三个DropDownList控件方便的选择年月日
- 在ASP.NET中用三个DropDownList控件方便的选择年月日
- mobiscroll实现年月日分别选择
- 日期选择(年月日,年月)
- ComboBox控件自动生成年月日
- datetimepicker控件 只显示年月日
- javascript实现年月日的联动选择
- javascript自动生成年月日下拉选择框
- iOS 实现UICollectionView头部悬停效果
- springmvc+mybatis 构建cms内容发布系统
- 时间获取和转换TimeUtils
- 知道ip地址和子网掩码后可以算出网络地址、广播地址、地址范围、本网主机数
- 我的Java设计模式-策略模式
- 选择年月日控件YMDatePickerDialog
- Java方法概述
- 43 且听风吟之呆逼二三事
- SQL SERVER 导入.sql文件 出现SYSTEM.OUTOFMEMORY EXCEPTION 异常解决办法
- java读取配置文件(使用java.util.Properties读取)
- 安卓文字转语音——其实可以很简单——TextToSpeech用法解析
- 【BIM+毕加索】BIM信息化的时代已经到来
- String
- cordova开源组件urlschemaURL的在第一次启动的无法获得消息的BUG