简单的日期选择控件的实现(弹出日历,选择日期)

来源:互联网 发布:嘉实优化红利 编辑:程序博客网 时间:2024/05/19 13:45

项目地址:https://github.com/vikramkakkar/SublimePicker

星星 一千八的  值得拥有

很简单  直接compile  之后 就是 界面 自定义 DialongFragmeng activity代码 三个部分。

首先界面:

<EditText        android:id="@+id/et"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="点击选择时间 "/>


然后 自定义DialogFragment:

//官方推荐的对话框碎片//DialogFragment 和Fragment一样的生命周期public class SublimePickerFragment extends DialogFragment {    SublimePicker mSublimePicker;    Callback mCallback;    DateFormat mDateFormatter, mTimeFormatter;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        mSublimePicker = (SublimePicker) getActivity().getLayoutInflater().inflate(R.layout.sublime_picker, container);        Bundle arguments = getArguments();        SublimeOptions options = null;        if (arguments != null) {            options = arguments.getParcelable("SUBLIME_OPTIONS");        }        mSublimePicker.initializePicker(options, mListener);        return mSublimePicker;    }    SublimeListenerAdapter mListener = new SublimeListenerAdapter() {        @Override        public void onCancelled() {            if (mCallback != null) {                mCallback.onCancelled();            }            dismiss();        }        @Override        public void onDateTimeRecurrenceSet(SublimePicker sublimeMaterialPicker, SelectedDate selectedDate, int hourOfDay,                                            int minute, SublimeRecurrencePicker.RecurrenceOption recurrenceOption, String recurrenceRule) {            if (mCallback != null) {                mCallback.onDateTimeRecurrenceSet(selectedDate, hourOfDay, minute, recurrenceOption, recurrenceRule);            }            dismiss();        }    };    //构造函数  // 初始化格式机器  设置时区    public SublimePickerFragment() {        mDateFormatter = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.getDefault());        mTimeFormatter = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault());        mTimeFormatter.setTimeZone(TimeZone.getTimeZone("GMT+0"));    }    public void setCallback(Callback callback) {        mCallback = callback;    }    // For communicating with the activity    public interface Callback {        void onCancelled();        void onDateTimeRecurrenceSet(SelectedDate selectedDate,                                     int hourOfDay, int minute,                                     SublimeRecurrencePicker.RecurrenceOption recurrenceOption,                                     String recurrenceRule);    }}


最后activity代码:

public class Sampler extends AppCompatActivity {    SelectedDate mSelectedDate;    //回调函数    SublimePickerFragment.Callback mFragmentCallback = new SublimePickerFragment.Callback() {        @Override        public void onCancelled() {        }        @Override        public void onDateTimeRecurrenceSet(SelectedDate selectedDate, int hourOfDay, int minute,                                            SublimeRecurrencePicker.RecurrenceOption recurrenceOption, String recurrenceRule) {            mSelectedDate = selectedDate;            updateInfoView();        }    };    private EditText edit;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.sampler);        // Initialize views to display the chosen Date, Time & Recurrence options        edit = (EditText)findViewById(R.id.et);        edit.setInputType(InputType.TYPE_NULL);        //设置点击事件跳转到日历界面。        edit.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                SublimePickerFragment pickerFrag = new SublimePickerFragment();                pickerFrag.setCallback(mFragmentCallback);                //将信息传入到options中。                SublimeOptions options = new SublimeOptions();                int displayOptions = 0;                displayOptions |= SublimeOptions.ACTIVATE_DATE_PICKER;                options.setPickerToShow(SublimeOptions.Picker.DATE_PICKER);                options.setDisplayOptions(displayOptions);                options.setCanPickDateRange(true);                // Valid options                Bundle bundle = new Bundle();                bundle.putParcelable("SUBLIME_OPTIONS", options);                pickerFrag.setArguments(bundle);                pickerFrag.setStyle(DialogFragment.STYLE_NO_TITLE, 0);//                pickerFrag.setStyle(DialogFragment.STYLE_NO_TITLE, 0);                pickerFrag.show(getSupportFragmentManager(), "SUBLIME_PICKER");            }        });    }    // Show date, time & recurrence options that have been selected    //显示选中的时间。    private void updateInfoView() {        if (mSelectedDate != null) {            edit.setText(applyBoldStyle("")                    .append(String.valueOf(mSelectedDate.getStartDate().get(Calendar.YEAR)))                    .append("-")                    .append(mSelectedDate.getStartDate().get(Calendar.MONTH) < 9 ? "0" + String.valueOf(mSelectedDate.getStartDate().get(Calendar.MONTH)  + 1):String.valueOf(mSelectedDate.getStartDate().get(Calendar.MONTH)  + 1))                    .append("-")                    .append(mSelectedDate.getStartDate().get(Calendar.DAY_OF_MONTH) < 10 ? "0" + String.valueOf(mSelectedDate.getStartDate().get(Calendar.DAY_OF_MONTH)):String.valueOf(mSelectedDate.getStartDate().get(Calendar.DAY_OF_MONTH)))                    );        }    }    // Applies a StyleSpan to the supplied text    private SpannableStringBuilder applyBoldStyle(String text) {        SpannableStringBuilder ss = new SpannableStringBuilder(text);        ss.setSpan(new StyleSpan(Typeface.BOLD), 0, text.length(),                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);        return ss;    }}



阅读全文
2 0
原创粉丝点击