Cómo puedo establecer un intervalo de minutos en DialogFragment
Estoy tratando de establecer un intervalo de 10 minutos en el android DialogFragment
(sugerido por google), pero realmente no puedo encontrar una manera de hacerlo.
Aquí está la clase de fragmentos que muestra el diálogo:
- ¿Cómo agregar efectos de sonido en Android?
- Uso de TelephonyManager para obtener SIM CÓDIGO DE PAÍS - ¿Cómo?
- No se puede copiar la base de datos SQLite de los activos
- Determine el ancho de banda de conexión de red (velocidad) wifi y datos móviles
- Algoritmo de trilateración multipunto en Java
public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the current time as the default values for the picker final Calendar c = Calendar.getInstance(); int hour = c.get(Calendar.HOUR_OF_DAY); int minute = c.get(Calendar.MINUTE); // Create a new instance of TimePickerDialog and return it return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity())); } public void onTimeSet(TimePicker view, int hourOfDay, int minute) { String realMinute= ""; switch (minute) { case 1: realMinute = "01"; break; case 2: realMinute = "02"; break; case 3: realMinute = "03"; break; case 4: realMinute = "04"; break; case 5: realMinute = "05"; break; case 6: realMinute = "06"; break; case 7: realMinute = "07"; break; case 8: realMinute = "08"; break; case 9: realMinute = "09"; break; default: realMinute = String.valueOf(minute); break; } final String selectedDate = String.valueOf(hourOfDay) + ":" + realMinute; EditText selectedTimeTxt = (EditText) getActivity().findViewById(R.id.selectedTime); selectedTimeTxt.setText(selectedDate); }
Todo funciona como se esperaba, pero lo que necesito es permitir al usuario escoger sólo intervalos de 10 minutos – por ejemplo 1:10, 1:20, 1:30, 1:40 etc …
¿Es posible modificarlo, o extenderlo de alguna manera para satisfacer mis necesidades? Sé que me falta un punto básico aquí, pero como un novato no soy capaz de detectarlo.
EDITAR
Aquí mis opiniones son:
- Integración de Google Plus en la aplicación Android
- mapas androides, marcadores y fugas de memoria
- Android Game Development (Programación / Algoritmo) Pregunta
- Propósito de los parámetros XXMaxPermSize, vmargs, Xms y Xms en eclipse.ini, ¿qué hacen
- RxJava comparte las emisiones de un Observable entre múltiples suscriptores
- Reconocimiento de imágenes - Descriptor binario representación en Mat - OpenCV Android
- Crear cadena JSON con GSON
- Cómo devolver una matriz de JNI a Java?
Puede establecer sus propios valores en el segundo selector de números (el selector de números de minutos), con una llamada de setDisplayedValues
. Sin embargo, primero debe buscar la vista de NumberPicker
.
Android Device Monitor, tiene una buena característica de la captura de la pantalla del dispositivo y las vistas separadas, por lo que puede encontrar el ID (o una ruta de acceso) a su vista deseada:
Dado que su nueva matriz de valores tiene 6 valores (0 … 5), tendrá que convertir los minutos actuales en decenas , por lo que no saldrá de rango.
He aquí un ejemplo completo:
@Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Calendar c = Calendar.getInstance(); int hour = c.get(Calendar.HOUR_OF_DAY); // Convert current minutes to tens // 55 = 50, 56 = 00 int minute = c.get(Calendar.MINUTE) / 10; minute = (minute > 5) ? 0 : minute; // Create a new instance of TimePickerDialog and return it final TimePickerDialog tpd = new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity())); tpd.setOnShowListener(new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialog) { int tpLayoutId = getResources().getIdentifier("timePickerLayout", "id", "android"); ViewGroup tpLayout = (ViewGroup) tpd.findViewById(tpLayoutId); ViewGroup layout = (ViewGroup) tpLayout.getChildAt(0); // Customize minute NumberPicker NumberPicker minutePicker = (NumberPicker) layout.getChildAt(2); minutePicker.setDisplayedValues(new String[]{"00", "10", "20", "30", "40", "50"}); minutePicker.setMinValue(0); minutePicker.setMaxValue(5); } }); return tpd; } public void onTimeSet(TimePicker view, int hourOfDay, int minute) { minute = minute * 10; Toast.makeText(getActivity(), "Selected minute: " + minute, Toast.LENGTH_LONG).show(); }
Editar:
Cuando se utiliza el tema de AppCompat, el cuadro de diálogo mostrará un deslizador circular, que es uncustomizable. Sin embargo, puede decirle al diálogo que utilice un tema más reciente (que no será un problema porque su minSdk es 15):
final TimePickerDialog tpd = new TimePickerDialog(getActivity(), android.R.style.Theme_Holo_Light_Dialog, this, hour, minute, DateFormat.is24HourFormat(getActivity()));
- Transferencia de la aplicación de Android a otro desarrollador
- Androide. ¿Cómo establezco todos los botones que se pueden hacer clic o no se pueden seleccionar a la vez usando setClickable?