Android: ¿Cambia el separador de tiempo en TimePicker estándar?

¿Cómo puedo cambiar el separador de tiempo del estándar. a un: en una aplicación para Android? Estoy utilizando minSDK 15, y targetSDK 20.

separador de tiempo

Esta respuesta habla de la clase TimePicker como el OP especifica que como un requisito en la recompensa y tiene adiciones como el elemento tiene un poco de un código de nuevo con el lanzamiento de Android 5 / Lollipop.


¿Cómo hacerlo?

El texto del divisor no puede modificarse simplemente mediante una simple llamada simple. El texto del divisor se establece internamente en TimePicker.setDividerText() que es un método privado que significa que no se puede sobreescribir tampoco. Para hacerlo aún más difícil, la variable divider textview mDivider se mDivider como privada, así como no tenemos acceso directo a la vista de texto del divisor.

Una solución simple para el problema es simplemente anular el valor después de que se establece por el constructor. Para ello, creamos nuestra propia subclase de TimePicker, tratamos de encontrar el divisor y establecer su valor. Esto funcionará bien siempre y cuando el diseño coincida con el AOSP. mira las pieles de los OEM y se encoge de hombros

Consulte la fuente de la clase android.widget.TimePicker como referencia. Suponiendo que la etiqueta android-l-preview_r2 está siendo investigada, marque la línea 91 para la declaración de la variable mDivider y las líneas 531-553 para el método setDividerText() .

En la práctica, por favor?

 import android.content.Context; import android.content.res.Resources; import android.util.AttributeSet; import android.widget.TextView; import android.widget.TimePicker; public class CustomTimePicker extends TimePicker { public CustomTimePicker(Context context) { super(context); init(); } public CustomTimePicker(Context context, AttributeSet attrs) { super(context, attrs); init(); } public CustomTimePicker(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { TextView divider = (TextView) findViewById(Resources.getSystem() .getIdentifier("divider", "id", "android")); // the divider doesn't exist in the old-school widget style if (divider != null) { divider.setText(":"); } } } 

Eso no funciona en Android L!

El método descrito era válido para KitKat, pero ya no es bueno usarlo al compilar contra L. Si comprueba TimePicker en android-5.0.0_r2 , encontrará que el manejo del estilo se descarga a una clase de delegado independiente. La clase TimePickerClockDelegate parece ser la que se parece al selector de legado.

Los problemas sobre las variables privadas y los métodos todavía se encuentra en Android 5.0.0 y la nueva estructuración complica las cosas un montón más. Si todavía cree que desea romper la localización (consulte la sección ¿Debería hacerlo? ), Probablemente será mejor usar una implementación personalizada de TimePicker. Un buen punto de partida podría ser seleccionar las nuevas clases TimePicker y TimePickerClockDelegate, fusionarlas y cortar la capa de abstracción y modificar el código de configuración del texto divisor como se hizo en la versión de KitKat. Independientemente, eso va más allá del alcance de una respuesta sencilla y útil, ya que tomar esa ruta producirá muchos efectos secundarios, como romper la capacidad de organización en todo el sistema, y ​​debería ser considerado sabiamente.


¿Deberías hacerlo?

Realmente no.

El TimePicker realmente va a elegir el carácter : como el divisor por defecto en caso de que algo salga mal, pero preferirá la variación localizada por encima de todo.

Esto significa que si el escenario que está utilizando prefiere escribir el tiempo como HH:mm , el selector usará automáticamente : como el divisor, pero si su locale usa HH.mm entonces el selector simplemente usará . como el divisor. Si hubiera un entorno que escribiría la hora en el formato de HH/mm , el selector se adaptaría automáticamente y utilizará / como divisor para proporcionar coherencia con el formato local (también conocido como localización).

Si cree que debe anular este comportamiento, puede utilizar el método descrito anteriormente, pero tenga en cuenta que hacerlo va en contra de la localización e incluso la coherencia entre varias aplicaciones.

  • Android: enfoque en elementos TimePicker
  • ¿Cambiar el título en un TimePicker?
  • Cambiar el color de texto de Time Picker
  • Android: TimePicker setIs24HourView no funciona
  • Android TimePicker no se muestra bien en modo horizontal
  • ¿Cómo implementar android Minutos-Segundos selector?
  • Obtener el total de horas de dos timepicker
  • Android: ¿cómo tener este tipo de selección de tiempo?
  • TimePicker NullPointerException en ICS
  • Consiga tiempo usando el selector de tiempo android
  • Excepción de puntero nulo de TimePicker al pulsar los botones más o menos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.