package com.hdl.hdllinphonesdk.dialog; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.content.res.Resources; import android.graphics.Point; import android.graphics.drawable.ColorDrawable; import android.os.Build; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.Display; import android.view.Gravity; import android.view.View; import android.view.WindowManager; import android.widget.DatePicker; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.NumberPicker; import android.widget.TextView; import android.widget.TimePicker; import com.hdl.hdllinphonesdk.R; import java.lang.reflect.Field; public class LpTimeDialog extends Dialog { private Context mContext; private DatePicker datePicker; private TimePicker timePicker; private TextView cancelBtn, confirmBtn; private ClickListenerInterface mClickListener; public LpTimeDialog(Context context, ClickListenerInterface listener) { super(context, R.style.video_dialog); this.mContext = context; this.mClickListener = listener; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dialog_lpsdk_time_select); initView(); initData(); Display display = ((Activity) mContext).getWindowManager().getDefaultDisplay(); WindowManager.LayoutParams p = getWindow().getAttributes(); Point point = new Point(); display.getSize(point); p.width = point.x; getWindow().setGravity(Gravity.BOTTOM); } /** * initView */ private void initView() { datePicker = findViewById(R.id.lp_dialog_data_picker); timePicker = findViewById(R.id.lp_dialog_time_picker); cancelBtn = findViewById(R.id.lp_dialog_cancel_tv); cancelBtn.setOnClickListener(view -> { if (mClickListener != null) mClickListener.onCancelClick(this); }); confirmBtn = findViewById(R.id.lp_dialog_confirm_tv); confirmBtn.setOnClickListener(view -> { String time = datePicker.getYear() + "-" + getMonth(datePicker) + "-" + getDay(datePicker) + " " + getHour(timePicker) + ":" + getMinute(timePicker); if (mClickListener != null) mClickListener.onConfirmClick(this, time); }); } // 获取月份 private String getMonth(DatePicker _datePicker) { String moth_str = ""; int month_int = _datePicker.getMonth() + 1; if (month_int < 10) moth_str = "0" + month_int; else moth_str = month_int + ""; return moth_str; } // 获取日 private String getDay(DatePicker _datePicker) { String day_str = ""; int day_int = _datePicker.getDayOfMonth(); if (day_int < 10) day_str = "0" + day_int; else day_str = day_int + ""; return day_str; } // 获取小时 private String getHour(TimePicker _timePicker) { String hour_str = ""; int hour_int = _timePicker.getHour(); if (hour_int < 10) hour_str = "0" + hour_int; else hour_str = hour_int + ""; return hour_str; } // 获取分钟 private String getMinute(TimePicker _timePicker) { String minute_str = ""; int minute_int = _timePicker.getMinute(); if (minute_int < 10) minute_str = "0" + minute_int; else minute_str = minute_int + ""; return minute_str; } /** * initData */ private void initData() { timePicker.setIs24HourView(true); timePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS); // setDataPickerDividerColor(datePicker); //setTimePickerDividerColor(timePicker); } private void setDataPickerDividerColor(DatePicker timePicker) { LinearLayout llFirst = (LinearLayout) timePicker.getChildAt(0); LinearLayout mSpinners = (LinearLayout) llFirst.getChildAt(1); for (int i = 0; i < mSpinners.getChildCount(); i++) { if (mSpinners.getChildAt(i) instanceof NumberPicker) { Field[] pickerFields = NumberPicker.class.getDeclaredFields(); setPickerMargin((NumberPicker) mSpinners.getChildAt(i)); for (Field pf : pickerFields) { if (pf.getName().equals("mSelectionDivider")) { pf.setAccessible(true); try { pf.set(mSpinners.getChildAt(i), new ColorDrawable()); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (Resources.NotFoundException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } break; } } } } } private void setTimePickerDividerColor(TimePicker timePicker) { LinearLayout llFirst = (LinearLayout) timePicker.getChildAt(0); LinearLayout mSpinners = (LinearLayout) llFirst.getChildAt(1); for (int i = 0; i < mSpinners.getChildCount(); i++) { if (mSpinners.getChildAt(i) instanceof NumberPicker) { Field[] pickerFields = NumberPicker.class.getDeclaredFields(); setPickerMargin((NumberPicker) mSpinners.getChildAt(i)); for (Field pf : pickerFields) { if (pf.getName().equals("mSelectionDivider")) { pf.setAccessible(true); try { pf.set(mSpinners.getChildAt(i), new ColorDrawable()); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (Resources.NotFoundException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } break; } } } } } /** * 设置picker之间的间距 */ private void setPickerMargin(NumberPicker picker) { LinearLayout.LayoutParams p = (LinearLayout.LayoutParams) picker.getLayoutParams(); p.setMargins(-getDensityValue(16, mContext), 0, -getDensityValue(16, mContext), 0); if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR1) { p.setMarginStart(-getDensityValue(16, mContext)); p.setMarginEnd(-getDensityValue(16, mContext)); } setEditTextSize(picker); } /** * 设置picker字体大小 */ private void setEditTextSize(NumberPicker np) { if (null != np) { for (int i = 0; i < np.getChildCount(); i++) { View child = np.getChildAt(i); if (child instanceof EditText) { EditText editText = (EditText) child; editText.setTextSize(18); } } } } public interface ClickListenerInterface { void onCancelClick(LpTimeDialog dialog); void onConfirmClick(LpTimeDialog dialog, String startTime); } public static int getDensityValue(float value, Context activity) { DisplayMetrics displayMetrics = activity.getResources().getDisplayMetrics(); return (int) Math.ceil(value * displayMetrics.density); } }