DatePickerDialog的使用和套用

日期的选择控件DatePickerDialog

1.系统自带DatePickerDialog的使用:

private Calendar calendar;
private int mYear;
private int mMonth;
private int mDay;
private static final int DATE_DIALOG_ID = 0;
private DatePickerDialog datePickerDialog;
private DatePickerDialog showDateDialog(int id){
        switch (id){
            caseDATE_DIALOG_ID:
                return newDatePickerDialog(getActivity(),onDateSetListener,mYear,mMonth,mDay);
        }
        return null;
    }
 
   DatePickerDialog.OnDateSetListener onDateSetListener = new DatePickerDialog.OnDateSetListener(){
        @Override
        public voidonDateSet(DatePicker datePicker, int y, int m, int d) {
            mYear = y;
            mMonth = m;
            mDay = d;
           updateDisPlay();
        }
    };
 
    private voidupdateDisPlay(){
       dateTextView.setText(String.format("%04d-%02d-%02d", mYear,mMonth + 1, mDay));
    }

使用时:

calendar = Calendar.getInstance();

mYear = calendar.get(Calendar.YEAR);

 mMonth= calendar.get(Calendar.MONTH);

 mDay =calendar.get(Calendar.DAY_OF_MONTH);

datePickerDialog = showDateDialog(DATE_DIALOG_ID);

datePickerDialog.show();



2.套用

public class DatePickerView extends AlertDialog implements DialogInterface.OnClickListener, DatePicker.OnDateChangedListener{
    private static final String YEAR ="year";
    private static final String MONTH ="month";
    private static final String DAY ="day";
    private final DatePicker mDatePicker;
    private final OnDateSetListener mCallBack;
    private View view;

    public DatePickerView(Context context,OnDateSetListener onDateSetListener,
                          int year, intmonthOfYear, int dayOfMonth) {
        this(context, 0, onDateSetListener,year, monthOfYear, dayOfMonth);
    }

    public DatePickerView(Context context, inttheme,
                          OnDateSetListeneronDateSetListener, int year, int monthOfYear,
                          int dayOfMonth) {
        super(context, theme);
        mCallBack = onDateSetListener;
        Context themeContext = getContext();
//將設置alertdialog的settitle和setButton方法注释掉,因为下面要使用setContentView(View view)方法
//代替原有的setView(View view)方法,区别是替换的范围不同。替换后就不需要设置alertdialog的title和button了。
// setButton(BUTTON_POSITIVE,
//themeContext.getText(R.string.date_time_set), this);
// setButton(BUTTON_NEGATIVE,themeContext.getText(R.string.cancel),
// (OnClickListener) null);
// setIcon(0);
//setTitle(R.string.date_picker_dialog_title);
        LayoutInflater inflater =(LayoutInflater) themeContext
               .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//注意,其实datepickerdialog就是把系统提供的日期选择器DatePicker包装一下而已,所以只需要实现自己需要的布局样式
//然后把DatePicker嵌套进去就可以了。
        view =inflater.inflate(R.layout.date_picker_dialog, null);
        view.setBackgroundColor(Color.BLUE);
        mDatePicker = (DatePicker)view.findViewById(R.id.datePicker);
        mDatePicker.init(year, monthOfYear,dayOfMonth, this);
 
       //实现自己的按钮
        setButton();
    }
 
    public void myShow() {
//自己实现show方法,主要是为了把setContentView方法放到show方法后面,否则会报错。
        show();
        setContentView(view);
    }
 
    private void setButton() {
//获取自己定义的响应按钮并设置监听,直接调用构造时传进来的CallBack接口(为了省劲,没有自己写接口,直接用之前本类定义好的)同时关闭对话框。
       view.findViewById(R.id.date_picker_ok).setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v){
                        if (mCallBack != null){
                            mDatePicker.clearFocus();
                           mCallBack.onDateSet(mDatePicker,
                                   mDatePicker.getYear(),
                                   mDatePicker.getMonth(),
                                    mDatePicker.getDayOfMonth());
                        }
                        dismiss();
                    }
                });
    }
 
    @Override
    public void onClick(DialogInterfacedialogInterface, int i) {
 
    }
 
    @Override
    public void onDateChanged(DatePickerdatePicker, int year, int month, int day) {
        mDatePicker.init(year, month, day,null);
    }
 
    public DatePicker getDatePicker() {
        return mDatePicker;
    }
 
    public void updateDate(int year, intmonthOfYear, int dayOfMonth) {
        mDatePicker.updateDate(year,monthOfYear, dayOfMonth);
    }
 
    public interface OnDateSetListener {
        void onDateSet(DatePicker view, intyear, int monthOfYear,
                       int dayOfMonth);
    }
 
    @Override
    public Bundle onSaveInstanceState() {
        Bundle state =super.onSaveInstanceState();
        state.putInt(YEAR,mDatePicker.getYear());
        state.putInt(MONTH,mDatePicker.getMonth());
        state.putInt(DAY,mDatePicker.getDayOfMonth());
        return state;
    }
 
    @Override
    public void onRestoreInstanceState(BundlesavedInstanceState) {
       super.onRestoreInstanceState(savedInstanceState);
        int year = savedInstanceState.getInt(YEAR);
        int month =savedInstanceState.getInt(MONTH);
        int day =savedInstanceState.getInt(DAY);
        mDatePicker.init(year, month, day,this);
    }
}


date_picker_dialog.xml

<?xml version="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
    android:background="@color/white_bg">
    <TextView
       android:id="@+id/date_picker_title"
       android:layout_width="match_parent"
       android:layout_height="40dp"
       android:text="请选择日期"
       android:textColor="@color/text_color"
       android:gravity="center"
       android:background="@color/yellow"/>
 
    <DatePicker
       android:id="@+id/datePicker"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal"
       android:calendarViewShown="false"
       android:spinnersShown="true"
       android:background="@color/white_bg"/>
 
    <TextView
       android:id="@+id/date_picker_ok"
       android:layout_width="match_parent"
        android:layout_height="40dp"
       android:gravity="center"
       android:text="完成"
       android:textColor="@color/text_color"
       android:background="@color/yellow"/>
</LinearLayout>

使用时:

datePickerView = newDatePickerView(getActivity(),mDateSetListener,mYear,mMonth,mDay);

datePickerView.myShow();

//mDateSetListener类似上面的onDateSetListener
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值