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

本文介绍了如何实现一个简单的日期选择控件,通过引用SublimePicker库,可以方便地在Android应用中集成弹出式日历功能。项目源码可在GitHub上获取,包括界面设计、自定义DialogFragment及Activity的使用方法。
摘要由CSDN通过智能技术生成

项目地址: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;
    }
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值