¿Cómo implementar android Minutos-Segundos selector?

Tengo que implementar un diálogo en el que el usuario puede introducir un tiempo en minutos y segundos. Por ejemplo: 6 minutos y 30 segundos. Allí también necesito un límite superior en el número de minutos (es decir, los minutos estarían en el rango de 0-10, segundos de 0-60).

Pero como se ha discutido aquí, el TimePicker de Android sólo presenta horas y minutos. He visto algunos mensajes sobre la adición de segundos a ella, pero nada sobre la eliminación de horas y la adición de segundos. Probablemente no hay manera de imponer un límite en los minutos, tampoco.

He visto algunos mensajes recomendando la creación de un selector de tiempo personalizado mediante NumberPicker, pero también han visto precauciones de que NumberPicker está destinado a fines internos y no debe utilizarse. Esto parecería ser un Catch-22.

Podría intentar modificar la fuente para TimePicker o NumberPicker, pero no soy salvaje sobre la cantidad de tiempo que tomaría para entender cómo trabajan y para mantener una versión de encargo adelante.

Supongo que eso me deja con la implementación de un selector de Minutos-Segundos personalizado. Usar los botones arriba-abajo para mover un número no parece demasiado difícil, pero no sé cómo permitir al usuario deslizar para desplazarse por los números de cada "rueda".

¿Alguna sugerencia?

One Solution collect form web for “¿Cómo implementar android Minutos-Segundos selector?”

Después de usar esta respuesta de SO para agregar un intervalo de minutos a la TimePickerDialog, hice una subclase similar que extiende el rango de las horas de hilado a 0-60 y trata las horas: minutos hilanderos como minutos: segundos:

import android.app.TimePickerDialog; import android.content.Context; import android.content.DialogInterface; import android.widget.NumberPicker; import android.widget.TimePicker; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; public class DurationPicker extends TimePickerDialog { private TimePicker timePicker; private final OnTimeSetListener callback; private int initialMinutes; public DurationPicker(Context context, OnTimeSetListener callBack, int minutes, int seconds) { super(context, callBack, minutes, seconds, true); // the last argument removes the am/pm spinner this.callback = callBack; this.initialMinutes = minutes; // we'll have to set this again after modifying the "hours" spinner this.setTitle("Set duration"); } @Override public void onClick(DialogInterface dialog, int which) { if (callback != null && timePicker != null) { timePicker.clearFocus(); callback.onTimeSet(timePicker, timePicker.getCurrentHour(), timePicker.getCurrentMinute()); } } @Override public void onAttachedToWindow() { super.onAttachedToWindow(); try { Class<?> classForid = Class.forName("com.android.internal.R$id"); Field timePickerField = classForid.getField("timePicker"); this.timePicker = (TimePicker) findViewById(timePickerField.getInt(null)); Field field = classForid.getField("hour"); // modify the hours spinner to cover the maximum number of minutes we want to support int maxMinutes = 60; NumberPicker mHourSpinner = (NumberPicker)timePicker.findViewById(field.getInt(null)); mHourSpinner.setMinValue(0); mHourSpinner.setMaxValue(maxMinutes); List<String> displayedValues = new ArrayList<String>(); for (int i = 0; i <= maxMinutes; i++) { displayedValues.add(String.format("%d", i)); } mHourSpinner.setDisplayedValues(displayedValues.toArray(new String[0])); mHourSpinner.setValue(initialMinutes); // we can set this again now that we've modified the hours spinner } catch (Exception e) { e.printStackTrace(); } } } 

En la devolución de llamada, sólo trate el valor del segundo argumento como minutos y el valor del tercer argumento como segundos.

Es posible que una versión futura de Android podría devolver resultados incorrectos cuando el "minutos" spinner se establece en un número por encima de 24, pero he leído el código TimePicker actual y no vi ningún problema con esto. También, podría ser posible modificar o reemplazar el hilandero am / pm con un hilandero segundos, y luego el selector podría soportar horas: minutos: segundos, así como minutos: segundos.

  • Excepción de puntero nulo de TimePicker al pulsar los botones más o menos
  • Obtener el valor del selector de fecha y hora a partir de un solo fragmento de diálogo y establecerlo en EditText
  • Android: ¿Cambia el separador de tiempo en TimePicker estándar?
  • BetterPickers sin una biblioteca de soporte
  • ¿Hay alguna forma de usar cancel en Android JellyBean TimePickerDialog?
  • Diálogo de selección de fecha y hora
  • ¿Es posible quitar el botón AM / PM de TimePicker?
  • Android: TimePicker setIs24HourView no funciona
  • Android - Nuevo estilo de calendario DatePicker y TimePicker
  • TimePicker hora no se actualiza después de cambiar a 24h
  • Consiga tiempo usando el selector de tiempo android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.