Как можно заставить его только на час с помощью Android TimePicker - PullRequest
0 голосов
/ 13 июня 2019

Я хотел бы использовать TimePicker для создания формы, в которой пользователь получает ввод только в единицах времени следующим образом:

03:00
15:00
17:00

Есть ли способ?

**** Это мой TimePicker ****

  protected Dialog onCreateDialog(int id) {

    // Get the calander
    Calendar c = Calendar.getInstance();

    // From calander get the year, month, day, hour, minute
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);
    int hour = c.get(Calendar.HOUR_OF_DAY);
    int minute = c.get(Calendar.MINUTE);

    switch (id) {
        case Date_id:

            // Open the datepicker dialog
            return new DatePickerDialog(GoodbyePetTimeDateSelectActivity.this, date_listener, year,
                    month, day);
        case Time_id:

            // Open the timepicker dialog
            return new TimePickerDialog(GoodbyePetTimeDateSelectActivity.this, time_listener, hour,
                    minute, false);

    }
    return null;
}

// Date picker dialog
DatePickerDialog.OnDateSetListener date_listener = new DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int year, int month, int day) {
        // store the data in one string and set it to text
        String date1 = String.valueOf(month) + "/" + String.valueOf(day)
                + "/" + String.valueOf(year);
        set_date.setText(date1);
    }
};

TimePickerDialog.OnTimeSetListener time_listener = new TimePickerDialog.OnTimeSetListener() {

    @Override
    public void onTimeSet(TimePicker view, int hour, int minute) {
        // store the data in one string and set it to text
        String time1 = String.valueOf(hour) + ":" + String.valueOf(minute);
        set_time.setText(time1);
    }
};

Я хочу удалить входной мин только приемник в час

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Из вопроса

TimePicker для создания формы, в которой пользователь получает ввод только в единицах времени

Я полагаю, вы хотите, чтобы TimePicker включал только пользователячтобы выбрать час и поставить 00 в минуту, программно не удаляйте и не исключайте значение минуты.Для реализации этого просто используйте следующий класс, который я предоставляю ниже, и используйте его везде, где вы предпочитаете:

CustomTimePickerDialog

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.widget.NumberPicker;
import android.widget.TimePicker;

public class CustomTimePickerDialog extends TimePickerDialog {

    private final static int TIME_PICKER_INTERVAL = 60;
    private TimePicker mTimePicker;
    private final OnTimeSetListener mTimeSetListener;

    public CustomTimePickerDialog(Context context, OnTimeSetListener listener,
                                  int hourOfDay, int minute, boolean is24HourView) {
        super(context, TimePickerDialog.THEME_HOLO_LIGHT, null, hourOfDay,
                minute / TIME_PICKER_INTERVAL, is24HourView);
        mTimeSetListener = listener;
    }

    @Override
    public void updateTime(int hourOfDay, int minuteOfHour) {
        mTimePicker.setCurrentHour(hourOfDay);
        mTimePicker.setCurrentMinute(minuteOfHour / TIME_PICKER_INTERVAL);
    }

    @Override
    public void onClick(DialogInterface dialog, int which) {
        switch (which) {
            case BUTTON_POSITIVE:
                if (mTimeSetListener != null) {
                    mTimeSetListener.onTimeSet(mTimePicker, mTimePicker.getCurrentHour(),
                            mTimePicker.getCurrentMinute() * TIME_PICKER_INTERVAL);
                }
                break;
            case BUTTON_NEGATIVE:
                cancel();
                break;
        }
    }

    @Override
    public void onAttachedToWindow() {
        super.onAttachedToWindow();
        try {
            Class<?> classForid = Class.forName("com.android.internal.R$id");
            Field timePickerField = classForid.getField("timePicker");
            mTimePicker = (TimePicker) findViewById(timePickerField.getInt(null));
            Field field = classForid.getField("minute");

            NumberPicker minuteSpinner = (NumberPicker) mTimePicker
                    .findViewById(field.getInt(null));
            minuteSpinner.setMinValue(0);
            minuteSpinner.setMaxValue((60 / TIME_PICKER_INTERVAL) - 1);
            List<String> displayedValues = new ArrayList<>();
            for (int i = 0; i < 60; i += TIME_PICKER_INTERVAL) {
                displayedValues.add(String.format("%02d", i));
            }
            minuteSpinner.setDisplayedValues(displayedValues
                    .toArray(new String[displayedValues.size()]));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Вызовите это из своей деятельности следующим образом:

    Calendar mcurrentTime = Calendar.getInstance();
    int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
    int minute = mcurrentTime.get(Calendar.MINUTE);
    CustomTimePickerDialog mTimePicker;
    mTimePicker = new CustomTimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
            tv.setText( selectedHour + ":" + selectedMinute);
        }
    }, hour, minute, false);
    mTimePicker.setTitle("Select Time");
    mTimePicker.show();

Это предоставит пользователю простой диалог выбора времени, но с ограничением минутных значений до 00, как это, см. Этот снимок экрана приложения:

CustomTimePickerDialog

Следуйтеэто Суть Я создал, чтобы просмотреть весь код проекта:

https://gist.github.com/SaadAAkash/fff10eda851736e30d76d7533186f927

0 голосов
/ 13 июня 2019

Вы можете сделать это, просто изменив следующую строку:

String time1 = String.valueOf(hour) + ":" + String.valueOf(minute);

на

String time1 = String.valueOf(hour) + ":00";
...