弹出框的配置:
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() { } });