J'espère que cela vous donne une idée de la façon de mettre en œuvre ce que vous recherchez. Je réalise que ce n'est pas la solution exacte que vous recherchez, mais c'est un début.
Ceci est le code que j'utilise pour mon TimePickerDialogFragment. Il est conçu pour afficher les minutes segment de la TimePicker
pour certains intervalles (par exemple, 5, 10 ou 15 minutes.)
Dans l'activité qui appellera la TimePickerDialogFragment vous aurez besoin de mettre en œuvre l'auditeur de rappel:
implements TimePickerDialogFragment.EditTimeDialogListener
Et vous appelez le dialogue comme ceci. Cet exemple fait les minutes toutes les 15 minutes:
TimePickerDialogFragment picker = TimePickerDialogFragment.newInstance("Select a Time", initialStartHour, 15);
picker.show(getFragmentManager(), "TimePickerDialogFragment");
initialStartHour
est l'heure que je le sélecteur avec initialiser par exemple 10 pour 10 heures.
Le code de mon TimePickerDialogFragment est configuré pour définir les minutes par intervalles.
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);
}
}
Maintenant, tout ce que vous avez à faire est d'extraire le temps sélectionné dans le fragment avec dans votre activité d'appel:
@Override
public void onFinishTimeDialog(String selectedTime) {
// Now set the TextView text!!
mHora.setText(selectedTime);
}
Je crée toujours ma propre dialogue TimePicker personnalisé, que je crée à partir d'un TimePicker. De là, je prends l'Heure ou la Minute NumberPicker et je mets setMinValue et/ou setMaxValue. – Barns
Comment pourrais-je le faire? Avez-vous un exemple en utilisant setMax/Min Value? @ Barns52 – TiagoIB
J'ai posté un exemple d'une boîte de dialogue personnalisée TimePicker. – Barns