Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 块时间选择器_Android_Google Cloud Firestore_Android Timepicker - Fatal编程技术网

Android 块时间选择器

Android 块时间选择器,android,google-cloud-firestore,android-timepicker,Android,Google Cloud Firestore,Android Timepicker,我有一个字段可以通过计时器选择时间 它工作得很好 我正在寻找一种在特定时间限制或阻止访问的方法 例如: 保存在FireStore(Firebase)中的打开和关闭时间字段: 我需要封锁开始时间前的几个小时和结束时间后的几个小时 代码时间选择器: private void timePicker(){ final Calendar c = Calendar.getInstance(); mHour = c.get(Calendar.HOUR_OF_DAY);

我有一个字段可以通过计时器选择时间

它工作得很好

我正在寻找一种在特定时间限制或阻止访问的方法

例如: 保存在FireStore(Firebase)中的打开和关闭时间字段:

我需要封锁开始时间前的几个小时和结束时间后的几个小时

代码时间选择器:

private void timePicker(){

        final Calendar c = Calendar.getInstance();
        mHour = c.get(Calendar.HOUR_OF_DAY);
        mMinute = c.get(Calendar.MINUTE);

        TimePickerDialog timePickerDialog = new TimePickerDialog(this,
                new TimePickerDialog.OnTimeSetListener() {

                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

                        mHour = hourOfDay;
                        mMinute = minute;


                        /*Formato da hora*/
                        String curTime = String.format("%02d:%02d", hourOfDay, minute);

                        mHora.setText(curTime);
                        mHoraString = curTime;

                    }
                }, mHour, mMinute, true);
        timePickerDialog.show();
}

我希望这能给你一个如何实现你想要的想法。我意识到这不是你想要的确切解决方案,但这只是一个开始

这是我用于TimePickerDialogFragment的代码。这是为了在特定的时间间隔(例如5、10或15分钟)显示
计时器的分钟段

在将调用TimePickerDialogFragment的活动中,您需要实现回调侦听器:

implements TimePickerDialogFragment.EditTimeDialogListener
你可以这样调用对话框。本例将分钟划分为15分钟的间隔:

    TimePickerDialogFragment picker = TimePickerDialogFragment.newInstance("Select a Time", initialStartHour, 15);
    picker.show(getFragmentManager(), "TimePickerDialogFragment");
initialStartHour
是我初始化选择器的时间,例如上午10点

my TimePickerDialogFragment的代码设置为按时间间隔设置分钟

public class TimePickerDialogFragment extends DialogFragment {

    private static final String ARG_TITLE = "title";
    private static final String ARG_START_HOUR = "startHour";
    private static final String ARG_MINUTE_INTERVAL = "minute_interval";

    private static final DecimalFormat FORMATTER = new DecimalFormat("00");
    NumberPicker minutePicker;

    private String title;
    private int startHour;
    private int minuteInterval;
    private String selectedTime;

    private EditTimeDialogListener mListener;

    public TimePickerDialogFragment() {
    }

    public static TimePickerDialogFragment newInstance(String title, int startHour, int minuteInterval) {
        TimePickerDialogFragment fragment = new TimePickerDialogFragment();
        Bundle args = new Bundle();
        args.putString(ARG_TITLE, title);
        args.putInt(ARG_START_HOUR, startHour);
        args.putInt(ARG_MINUTE_INTERVAL, minuteInterval);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            title = getArguments().getString(ARG_TITLE);
            startHour = getArguments().getInt(ARG_START_HOUR);
            minuteInterval = getArguments().getInt(ARG_MINUTE_INTERVAL);
        }
    }

    @Override
    public Dialog onCreateDialog(Bundle saveIntsanceState){

        final Context context = getActivity();

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        LayoutInflater inflater = getActivity().getLayoutInflater();

        View rootView = inflater.inflate(R.layout.fragment_time_picker_dialog, null, false);
        final TimePicker picker = (TimePicker) rootView.findViewById(R.id.timePicker);
        View minute = picker.findViewById(Resources.getSystem().getIdentifier("minute", "id", "android"));
        setMinutePicker(minute);

        //Block number keyboard
        picker.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);

        picker.setCurrentHour(startHour);
        picker.setCurrentMinute(0);
        // setHour is available for API level 23 and above!!
//        picker.setHour(startHour);

        final TextView tvTitle = (TextView)rootView.findViewById(R.id.tvTimePickerDialogTitle);
        tvTitle.setText(title);
//        picker.setSpinnersShown(false);
//        picker.setCalendarViewShown(true);

        builder.setView(rootView)
        // setTitle is available for API level 23 and above!!
//                .setTitle(title)
                .setPositiveButton(R.string.ok_button_dialog_title, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // call the method on the parent activity when user click the positive button

                        Integer h = picker.getCurrentHour();
                        Integer m = picker.getCurrentMinute() * minuteInterval;

                        String hh = h.toString();
                        if(h < 10){
                            hh = "0" + hh;
                        }

                        String mm = m.toString();
                        if(m < 10){
                            mm = "0" + mm;
                        }

                        selectedTime = hh + mm;
                        if(mListener == null) mListener = (EditTimeDialogListener) context;
                        mListener.onFinishTimeDialog(selectedTime);
                    }
                })
                .setNegativeButton(R.string.cancel_button_dialog_title, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // call the method on the parent activity when user click the negative button
                    }
                });
        return builder.create();
    }

    private void setMinutePicker(View minute){
        int n = 60/minuteInterval;
        String[] displayValues = new String[n];

        for(int i = 0; i < n; i++){
            displayValues[i] = FORMATTER.format(i*minuteInterval);
        }

        if((minute != null) && (minute instanceof NumberPicker)){
            minutePicker = (NumberPicker) minute;

            minutePicker.setMinValue(0);
            minutePicker.setMaxValue(n-1);
            minutePicker.setDisplayedValues(displayValues);
        }
    }


    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        try {
            if(mListener == null) mListener = (EditTimeDialogListener) context;
        }
        catch (Exception ex){
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    public interface EditTimeDialogListener {
        void onFinishTimeDialog(String selectedTime);
    }

}

我总是创建自己的自定义时间选择器对话框,它是我从时间选择器创建的。从那里,我抓取小时或分钟数字图标并设置setMinValue和/或setMaxValue。我该怎么做?您是否有使用setMax/Min值的示例@Barns52I发布了一个自定义计时器对话框的示例。
public class TimePickerDialogFragment extends DialogFragment {

    private static final String ARG_TITLE = "title";
    private static final String ARG_START_HOUR = "startHour";
    private static final String ARG_MINUTE_INTERVAL = "minute_interval";

    private static final DecimalFormat FORMATTER = new DecimalFormat("00");
    NumberPicker minutePicker;

    private String title;
    private int startHour;
    private int minuteInterval;
    private String selectedTime;

    private EditTimeDialogListener mListener;

    public TimePickerDialogFragment() {
    }

    public static TimePickerDialogFragment newInstance(String title, int startHour, int minuteInterval) {
        TimePickerDialogFragment fragment = new TimePickerDialogFragment();
        Bundle args = new Bundle();
        args.putString(ARG_TITLE, title);
        args.putInt(ARG_START_HOUR, startHour);
        args.putInt(ARG_MINUTE_INTERVAL, minuteInterval);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            title = getArguments().getString(ARG_TITLE);
            startHour = getArguments().getInt(ARG_START_HOUR);
            minuteInterval = getArguments().getInt(ARG_MINUTE_INTERVAL);
        }
    }

    @Override
    public Dialog onCreateDialog(Bundle saveIntsanceState){

        final Context context = getActivity();

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        LayoutInflater inflater = getActivity().getLayoutInflater();

        View rootView = inflater.inflate(R.layout.fragment_time_picker_dialog, null, false);
        final TimePicker picker = (TimePicker) rootView.findViewById(R.id.timePicker);
        View minute = picker.findViewById(Resources.getSystem().getIdentifier("minute", "id", "android"));
        setMinutePicker(minute);

        //Block number keyboard
        picker.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);

        picker.setCurrentHour(startHour);
        picker.setCurrentMinute(0);
        // setHour is available for API level 23 and above!!
//        picker.setHour(startHour);

        final TextView tvTitle = (TextView)rootView.findViewById(R.id.tvTimePickerDialogTitle);
        tvTitle.setText(title);
//        picker.setSpinnersShown(false);
//        picker.setCalendarViewShown(true);

        builder.setView(rootView)
        // setTitle is available for API level 23 and above!!
//                .setTitle(title)
                .setPositiveButton(R.string.ok_button_dialog_title, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // call the method on the parent activity when user click the positive button

                        Integer h = picker.getCurrentHour();
                        Integer m = picker.getCurrentMinute() * minuteInterval;

                        String hh = h.toString();
                        if(h < 10){
                            hh = "0" + hh;
                        }

                        String mm = m.toString();
                        if(m < 10){
                            mm = "0" + mm;
                        }

                        selectedTime = hh + mm;
                        if(mListener == null) mListener = (EditTimeDialogListener) context;
                        mListener.onFinishTimeDialog(selectedTime);
                    }
                })
                .setNegativeButton(R.string.cancel_button_dialog_title, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // call the method on the parent activity when user click the negative button
                    }
                });
        return builder.create();
    }

    private void setMinutePicker(View minute){
        int n = 60/minuteInterval;
        String[] displayValues = new String[n];

        for(int i = 0; i < n; i++){
            displayValues[i] = FORMATTER.format(i*minuteInterval);
        }

        if((minute != null) && (minute instanceof NumberPicker)){
            minutePicker = (NumberPicker) minute;

            minutePicker.setMinValue(0);
            minutePicker.setMaxValue(n-1);
            minutePicker.setDisplayedValues(displayValues);
        }
    }


    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        try {
            if(mListener == null) mListener = (EditTimeDialogListener) context;
        }
        catch (Exception ex){
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    public interface EditTimeDialogListener {
        void onFinishTimeDialog(String selectedTime);
    }

}
@Override
public void onFinishTimeDialog(String selectedTime) {
        // Now set the TextView text!!
        mHora.setText(selectedTime);
}