第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Android TimePickerDialog設(shè)置最大時(shí)間

Android TimePickerDialog設(shè)置最大時(shí)間

拉風(fēng)的咖菲貓 2019-11-03 08:04:22
我正在尋找一種方法來設(shè)置在Android上可以選擇的最大和最小時(shí)間TimePickerDialog,并將默認(rèn)的分鐘間隔從1分鐘更改為5分鐘,我以為那是一件容易的事,但我找不到辦法!
查看完整描述

3 回答

?
慕妹3242003

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊

對于lolipop和更高版本的android,您可以使用此修改過的RangeTimePickerDialog類


(從lolipop,Timepicker默認(rèn)使用時(shí)鐘模式(材料設(shè)計(jì)),因此舊的自定義類將無法使用。我們可以將模式更改為Spinner以獲取最新版本,并可以重用該類)


public class RangeTimePickerDialog extends TimePickerDialog {


    private int minHour = -1;

    private int minMinute = -1;


    private int maxHour = 25;

    private int maxMinute = 25;


    private int currentHour = 0;

    private int currentMinute = 0;


    private Calendar calendar = Calendar.getInstance();

    private DateFormat dateFormat;



    public RangeTimePickerDialog(Context context, int dialogTheme, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView) {

        super(context, callBack, hourOfDay, minute, is24HourView);

        currentHour = hourOfDay;

        currentMinute = minute;

        dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT);

        fixSpinner(context, hourOfDay, minute, is24HourView);


        try {

            Class<?> superclass = getClass().getSuperclass();

            Field mTimePickerField = superclass.getDeclaredField("mTimePicker");

            mTimePickerField.setAccessible(true);

            TimePicker mTimePicker = (TimePicker) mTimePickerField.get(this);

            mTimePicker.setOnTimeChangedListener(this);

        } catch (NoSuchFieldException e) {

        } catch (IllegalArgumentException e) {

        } catch (IllegalAccessException e) {

        }

    }


    public void setMin(int hour, int minute) {

        minHour = hour;

        minMinute = minute;

    }


    public void setMax(int hour, int minute) {

        maxHour = hour;

        maxMinute = minute;

    }


    @Override

    public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {


        boolean validTime = true;

        if (hourOfDay < minHour || (hourOfDay == minHour && minute < minMinute)){

            validTime = false;

        }


        if (hourOfDay  > maxHour || (hourOfDay == maxHour && minute > maxMinute)){

            validTime = false;

        }


        if (validTime) {

            currentHour = hourOfDay;

            currentMinute = minute;

        }


        updateTime(currentHour, currentMinute);

        updateDialogTitle(view, currentHour, currentMinute);

    }


    private void updateDialogTitle(TimePicker timePicker, int hourOfDay, int minute) {

        calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);

        calendar.set(Calendar.MINUTE, minute);

        String title = dateFormat.format(calendar.getTime());

        setTitle(title);

    }



    private void fixSpinner(Context context, int hourOfDay, int minute, boolean is24HourView) {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // android:timePickerMode spinner and clock began in Lollipop

            try {

                // Get the theme's android:timePickerMode

                //two modes are available clock mode and spinner mode ... selecting spinner mode for latest versions

                final int MODE_SPINNER = 2;

                Class<?> styleableClass = Class.forName("com.android.internal.R$styleable");

                Field timePickerStyleableField = styleableClass.getField("TimePicker");

                int[] timePickerStyleable = (int[]) timePickerStyleableField.get(null);

                final TypedArray a = context.obtainStyledAttributes(null, timePickerStyleable, android.R.attr.timePickerStyle, 0);

                Field timePickerModeStyleableField = styleableClass.getField("TimePicker_timePickerMode");

                int timePickerModeStyleable = timePickerModeStyleableField.getInt(null);

                final int mode = a.getInt(timePickerModeStyleable, MODE_SPINNER);

                a.recycle();

                if (mode == MODE_SPINNER) {

                    TimePicker timePicker = (TimePicker) findField(TimePickerDialog.class, TimePicker.class, "mTimePicker").get(this);

                    Class<?> delegateClass = Class.forName("android.widget.TimePicker$TimePickerDelegate");

                    Field delegateField = findField(TimePicker.class, delegateClass, "mDelegate");

                    Object delegate = delegateField.get(timePicker);

                    Class<?> spinnerDelegateClass;

                    if (Build.VERSION.SDK_INT != Build.VERSION_CODES.LOLLIPOP) {

                        spinnerDelegateClass = Class.forName("android.widget.TimePickerSpinnerDelegate");

                    } else {


                        spinnerDelegateClass = Class.forName("android.widget.TimePickerClockDelegate");

                    }

                    if (delegate.getClass() != spinnerDelegateClass) {

                        delegateField.set(timePicker, null); // throw out the TimePickerClockDelegate!

                        timePicker.removeAllViews(); // remove the TimePickerClockDelegate views

                        Constructor spinnerDelegateConstructor = spinnerDelegateClass.getConstructor(TimePicker.class, Context.class, AttributeSet.class, int.class, int.class);

                        spinnerDelegateConstructor.setAccessible(true);

                        // Instantiate a TimePickerSpinnerDelegate

                        delegate = spinnerDelegateConstructor.newInstance(timePicker, context, null, android.R.attr.timePickerStyle, 0);

                        delegateField.set(timePicker, delegate); // set the TimePicker.mDelegate to the spinner delegate

                        // Set up the TimePicker again, with the TimePickerSpinnerDelegate

                        timePicker.setIs24HourView(is24HourView);

                        timePicker.setCurrentHour(hourOfDay);

                        timePicker.setCurrentMinute(minute);

                        timePicker.setOnTimeChangedListener(this);

                    }

                }

            } catch (Exception e) {

                throw new RuntimeException(e);

            }

        }

    }

    private static Field findField(Class objectClass, Class fieldClass, String expectedName) {

        try {

            Field field = objectClass.getDeclaredField(expectedName);

            field.setAccessible(true);

            return field;

        } catch (NoSuchFieldException e) {} // ignore

        // search for it if it wasn't found under the expected ivar name

        for (Field searchField : objectClass.getDeclaredFields()) {

            if (searchField.getType() == fieldClass) {

                searchField.setAccessible(true);

                return searchField;

            }

        }

        return null;

    }

}


查看完整回答
反對 回復(fù) 2019-11-04
?
慕村225694

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以以此為起點(diǎn)。


我擴(kuò)展了TimePickerDialog并添加了2個(gè)方法setMin和setMax。


在onTimeChanged方法中,我檢查新時(shí)間相對于最小/最大時(shí)間是否有效。


它仍然需要拋光...


public class BoundTimePickerDialog extends TimePickerDialog {


    private int minHour = -1, minMinute = -1, maxHour = 100, maxMinute = 100;


    private int currentHour, currentMinute;


    public BoundTimePickerDialog(Context context, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView) {

        super(context, callBack, hourOfDay, minute, is24HourView);

    }


    public void setMin(int hour, int minute) {

        minHour = hour;

        minMinute = minute;

    }


    public void setMax(int hour, int minute) {

        maxHour = hour;

        maxMinute = minute;

    }


    @Override

    public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {

        super.onTimeChanged(view, hourOfDay, minute);


        boolean validTime;

        if(hourOfDay < minHour) {

            validTime = false;

        }

        else if(hourOfDay == minHour) {

            validTime = minute >= minMinute;

        }

        else if(hourOfDay == maxHour) {

            validTime = minute <= maxMinute;

        }

        else {

            validTime = true;

        }


        if(validTime) {

            currentHour = hourOfDay;

            currentMinute = minute;

        }

        else {

            updateTime(currentHour, currentMinute);

        }

    }

}


查看完整回答
反對 回復(fù) 2019-11-04
  • 3 回答
  • 0 關(guān)注
  • 419 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號