DatePickerDialog的使用和套用

来源:互联网 发布:vb.net 用户控件 编辑:程序博客网 时间:2024/04/30 11:45

日期的选择控件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
0 0
原创粉丝点击