package com.cxys.cashregistersystem.widget;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.view.View;
import android.view.WindowManager;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.NumberPicker;
import android.widget.TextView;
import android.widget.TimePicker;
import com.cxys.cashregistersystem.R;
import com.cxys.cashregistersystem.tools.DeviceUtils;
import com.cxys.cashregistersystem.tools.LLog;
import java.lang.reflect.Field;
import java.util.Calendar;
public class DatePickerDialog extends Dialog {
private DatePicker datePicker;
private TimePicker timePicker;
public DatePickerDialog(Context context, DatePicker.OnDateChangedListener onDateChangedListener, TimePicker.OnTimeChangedListener listener) {
super(context, R.style.baseDialog);
setContentView(R.layout.date_dialog_view);
WindowManager.LayoutParams attributes = getWindow().getAttributes();
attributes.width = (int) (DeviceUtils.getDeviceWidth(getContext()) * 0.4f);
attributes.height = (int) (DeviceUtils.getDeviceHeight(getContext()) * 0.4f);
datePicker = findViewById(R.id.id_date_picker);
timePicker = findViewById(R.id.id_timer_picker);
datePicker.setMinDate(System.currentTimeMillis());
setDatePickerStyle(datePicker);
setTimePickerStyle(timePicker);
int year = Calendar.getInstance().get(Calendar.YEAR);
int month = Calendar.getInstance().get(Calendar.MONTH);
int day = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
datePicker.init(year, month, day, onDateChangedListener);
timePicker.setIs24HourView(true);
timePicker.setOnTimeChangedListener(listener);
}
private void setDatePickerStyle(DatePicker datePicker) {
LinearLayout layout = (LinearLayout) datePicker.getChildAt(0);
LinearLayout selectLayout = (LinearLayout) layout.getChildAt(0);
int childCount1 = selectLayout.getChildCount();
for (int j = 0; j < childCount1; j++) {
NumberPicker numberPicker = (NumberPicker) selectLayout.getChildAt(j);
try {
Field mSelectionDivider = numberPicker.getClass().getDeclaredField("mSelectionDivider");
mSelectionDivider.setAccessible(true);
mSelectionDivider.set(numberPicker,new ColorDrawable(Color.RED));
Field mInputText = numberPicker.getClass().getDeclaredField("mInputText");
mInputText.setAccessible(true);
EditText inputText = (EditText) mInputText.get(numberPicker);
inputText.setTextColor(Color.WHITE);
Field mSelectorWheelPaint = numberPicker.getClass().getDeclaredField("mSelectorWheelPaint");
mSelectorWheelPaint.setAccessible(true);
Paint paint = (Paint) mSelectorWheelPaint.get(numberPicker);
paint.setColor(Color.WHITE);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
private void setTimePickerStyle(TimePicker timePicker) {
LinearLayout framLayout = (LinearLayout) timePicker.getChildAt(0);
LinearLayout selectLayout = (LinearLayout) framLayout.getChildAt(1);
int childCount1 = selectLayout.getChildCount();
for (int j = 0; j < childCount1; j++) {
View numberPicker = selectLayout.getChildAt(j);
if(numberPicker instanceof NumberPicker) {
try {
Field mSelectionDivider = numberPicker.getClass().getDeclaredField("mSelectionDivider");
mSelectionDivider.setAccessible(true);
mSelectionDivider.set(numberPicker, new ColorDrawable(Color.RED));
Field mInputText = numberPicker.getClass().getDeclaredField("mInputText");
mInputText.setAccessible(true);
EditText inputText = (EditText) mInputText.get(numberPicker);
inputText.setTextColor(Color.WHITE);
Field mSelectorWheelPaint = numberPicker.getClass().getDeclaredField("mSelectorWheelPaint");
mSelectorWheelPaint.setAccessible(true);
Paint paint = (Paint) mSelectorWheelPaint.get(numberPicker);
paint.setColor(Color.WHITE);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}else if(numberPicker instanceof TextView){
TextView dot = (TextView) numberPicker;
dot.setTextColor(Color.WHITE);
}
}
}
}
xml布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_blue"
android:alpha="0.95"
>
<TextView
android:id="@+id/id_title"
android:layout_width="match_parent"
android:layout_height="@dimen/px50"
android:gravity="center"
android:textSize="@dimen/sp18"
android:textColor="@color/color_white"
android:text="选择时间"
/>
<View
android:layout_width="match_parent"
android:layout_height="2px"
android:background="@color/color_white"
android:layout_below="@id/id_title"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="@dimen/px20"
>
<DatePicker
android:id="@+id/id_date_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:datePickerMode="spinner"
android:calendarViewShown="false"
android:calendarTextColor="@color/color_white"
/>
<TimePicker
android:id="@+id/id_timer_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:timePickerMode="spinner"
/>
</LinearLayout>
</RelativeLayout>
dialog style样式
<style name="baseDialog" parent="Theme.AppCompat.Light.Dialog">
<item name="android:windowBackground">@null</item>
<item name="android:windowFrame">@color/transparent</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowSoftInputMode">adjustPan|stateHidden</item>
</style>