日期时间选择器 修改样式

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值