一个可以选择日期的弹出框(附在EditText)

弹出框的配置:

public class DateTimePicker {
    private Button doneBtn;
    private Button cancelBtn;
    private Context mContext;
    private String dateTimeString;
    private OnSelectDoneListener mListner;
    private onDismissListener dismissListener;
    private DateTimePicker me;
    private LinearLayout picker;
    private PopupWindowFromBottom menuWindow;
    private View mParentView;
    private TextView lastView;
    DatePicker datePicker;
    TimePicker timePicker;

    WindowManager wm;
    int screenWidth;

    /***
     * 构造方法
     * @param context
     * @param parentView 父view
     */
    public DateTimePicker(Context context, View parentView) {
        me = this;
        mContext = context;
        mParentView = parentView;
        picker = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.datetimepicker, null);
        doneBtn = (Button) picker.findViewById(R.id.picker_done);
        cancelBtn = (Button) picker.findViewById(R.id.picker_cancel);
        menuWindow = new PopupWindowFromBottom(context, picker, 0);
        datePicker = (DatePicker) picker.findViewById(R.id.datepicker);
        timePicker = (TimePicker) picker.findViewById(R.id.timepicker);
        timePicker.setIs24HourView(true);
        bindBtnsEvent();
    }


    private void bindBtnsEvent() {
        doneBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String date = datePicker.getYear() + "." + datePicker.getMonth() + "." + datePicker.getDayOfMonth() + " " + timePicker.getCurrentHour() + ":" + plus0(timePicker.getCurrentMinute());
                mListner.onSelectDone(date);
                menuWindow.dismiss();
            }
        });
        cancelBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                menuWindow.dismiss();
            }
        });
    }

    public void show() {
        if (!menuWindow.isShowing()) {
            menuWindow.showAtLocation(mParentView, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); //设置layout在PopupWindow中显示的位置
        }
    }


    /***
     * 供外部调用
     * @param listener
     */
    public void setOnSelectDoneListener(OnSelectDoneListener listener) {
        mListner = listener;
    }

    public void setDismissListener(onDismissListener dismissListener) {
        this.dismissListener = dismissListener;
    }

    public interface OnSelectDoneListener {
        void onSelectDone(String date);
    }

    public interface onDismissListener {
        void onDismiss();
    }

    private class PopupWindowFromBottom extends PopupWindow {

        Context context;

        public PopupWindowFromBottom(Context context, final View view, int height) {
            super(context);
            this.context = context;
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            //设置SelectPicPopupWindow的View
            this.setContentView(view);
            //设置SelectPicPopupWindow弹出窗体的宽
            this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
            //设置SelectPicPopupWindow弹出窗体的高
            if (height == 0) {
                this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
            } else {
                this.setHeight(height);
            }
            //设置SelectPicPopupWindow弹出窗体可点击
            this.setFocusable(true);
            //实例化一个ColorDrawable颜色为半透明
            ColorDrawable dw = new ColorDrawable(0xb0000000);
            //设置SelectPicPopupWindow弹出窗体的背景
            this.setBackgroundDrawable(dw);
            //mMenuView添加OnTouchListener监听判断获取触屏位置如果在选择框外面则销毁弹出框
            view.setOnTouchListener(new View.OnTouchListener() {

                public boolean onTouch(View v, MotionEvent event) {

                    int height = view.findViewById(R.id.picker_cancel).getTop();
                    int y = (int) event.getY();
                    if (event.getAction() == MotionEvent.ACTION_UP) {
                        if (y < height) {
                            dismiss();
                        }
                    }
                    return true;
                }
            });


        }

        @Override
        public void dismiss() {
            super.dismiss();
            if (dismissListener != null)
                dismissListener.onDismiss();
        }

        @Override
        public void showAtLocation(View parent, int gravity, int x, int y) {
            super.showAtLocation(parent, gravity, x, y);
        }
    }

    String plus0(int num) {
        if (num < 10) {
            return "0" + num;
        }
        return num + "";
    }
}
 
怎么调用:
editText.setFocusable(false);
editText.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        picker.show();
        editText.setFocusable(true);
        editText.setFocusableInTouchMode(true);
        editText.requestFocus();
        editText.setFocusable(false);
        editText.setFocusableInTouchMode(false);
    }
});
picker = new DateTimePicker(getContext(), ((V8Activity) getContext()).getRootView());
picker.setOnSelectDoneListener(new DateTimePicker.OnSelectDoneListener() {
    @Override
    public void onSelectDone(String date) {
        editText.setText(date);
    }
});
picker.setDismissListener(new DateTimePicker.onDismissListener() {
    @Override
    public void onDismiss() {

    }
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值