Diálogo Datepicker sin visualización de calendario en lollipop ?

Leí la documentación: http://developer.android.com/guide/topics/ui/controls/pickers.html pero ahora en lollipop aparece el calendario (está bien para un evento pero es horrible para establecer una fecha de nacimiento, sería un modo giratorio.) ¡Y no puedo eliminarlo! En el diseño Es fácil con esta propiedad:

 

pero desde el código del DatePickerDialog si bash establecer

 dialogDatePicker.getDatePicker().setSpinnersShown(true); dialogDatePicker.getDatePicker().setCalendarViewShown(false); 

¡Estas propiedades no funcionan y el calendario continúa apareciendo!

 public static class MyDatePicker extends DialogFragment implements DatePickerDialog.OnDateSetListener { int pYear; int pDay; int pMonth; @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the current date as the default date in the picker final Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); DatePickerDialog dialogDatePicker = new DatePickerDialog(getActivity(), this, year, month, day); dialogDatePicker.getDatePicker().setSpinnersShown(true); dialogDatePicker.getDatePicker().setCalendarViewShown(false); return dialogDatePicker; // Create a new instance of DatePickerDialog and return it //return new DatePickerDialog(getActivity(), this, year, month, day); } public void onDateSet(DatePicker view, int year, int month, int day) { pYear = year; pDay = day; pMonth = month; } } 

DatePickerDialog utiliza el tema de diálogo especificado por su tema de actividad. Este es un tema completamente especificado, lo que significa que debe volver a especificar cualquier atributo, como el estilo del selector de fecha, que haya establecido en el tema de su actividad.

    

Nota: Debido al Issue 222208 , esto no funcionará en Android N / API 24. Ya se ha corregido en la plataforma para la próxima versión. No hay ninguna solución disponible para los dispositivos API 24.

Aplicar el Holo_theme en el nivel de código funcionó para mí.

 new DatePickerDialog(getActivity(),android.R.style.Theme_Holo_Dialog,this, year,month, day); 

Creo que la mejor solución para este problema es definir un nuevo estilo en el archivo XML y luego usarlo programáticamente en el código.

Aunque la respuesta de @alanv es perfecta y funcionará correctamente, el problema es que se aplicará a todos los selectores de Fecha. Supongamos que tiene un DatePicker donde necesita mostrar la vista de calendario, y otro DatePicker donde necesita mostrar la vista de spinner, esto no funcionará.

Así que defina un nuevo estilo en un styles.xml. Cree este archivo en una carpeta llamada values-v21 (consulte la estructura de nombres aquí ), ya que estos atributos se introducen solo después de lollipop. Antes de piruleta, solo había modo spinner.

    

Y finalmente, úsalo en el código como este

 DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), R.style.CustomDatePickerDialogTheme, this, year, month, day); return datePickerDialog; 

Agregue el atributo calendarViewShown y establézcalo en falso:

  

Puede usar una biblioteca para crear el estilo antiguo “spinner” DatePicker que es solo tres NumberPicker juntos:

https://github.com/drawers/SpinnerDatePicker

selector de fecha spinner

Primero, define un estilo:

  

Entonces,

 new SpinnerDatePickerDialogBuilder() .context(MainActivity.this) .callback(MainActivity.this) .spinnerTheme(spinnerTheme) .year(year) .monthOfYear(monthOfYear) .dayOfMonth(dayOfMonth) .build() .show(); 

Descargo de responsabilidad: soy el autor de esta biblioteca

Puedes intentar esto

 DatePickerDialog dialogDatePicker = new DatePickerDialog(getActivity(), this, year, month, day); dialogDatePicker.getDatePicker().setCalendarViewShown(false); return dialogDatePicker; 

eliminar

 dialogDatePicker.getDatePicker().setSpinnersShown(true); 

Dejando a un lado todas las cosas elegantes, use el constructor DatePickerDialog que toma el parámetro “int theme”. Sin él, parece predeterminado para cualquier int lo establece en modo CalendarView. Con enteros pequeños (0, 1, 2, 3 …) te dará un spinner (al menos en mi aplicación API 19 ejecutada en un emulador). Básicamente, pruebe el nuevo DatePickerDialog (getContext (), 0, this, year, month, day) Observe que hay 0 (o 1, o 2, etc.) allí

Precaución: no estoy seguro de si hay una lista en algún lugar de campos de tema estáticos y el uso de un “0” codificado en lugar de “Theme.HOLO_LIGHT” o lo que sea que pueda marcar la diferencia en diferentes dispositivos, pero hace el trabajo de alguna manera.

Prueba esto, funcionó para mí, haz un datelistener personalizado:

  @SuppressWarnings("deprecation") public void setDate(View view) { showDialog(999); } @SuppressWarnings("deprecation") protected Dialog onCreateDialog(int id) { // TODO Auto-generated method stub if (id == 999) { return new DatePickerDialog(this, myDateListener, year, month-1, day); } return null; } //THIS private DatePickerDialog.OnDateSetListener myDateListener= new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) { showDate(arg1, arg2+1, arg3); } }; private void showDate(int year, int month, int day) { //dateView.setText(new StringBuilder().append(day).append("-") // .append(month).append("-").append(year)); } 

Los métodos de DatePicker relacionados con mostrar la vista de hilandero y / o calendario están obsoletos desde el nivel 24 de la API. El método setSpinnersShown (booleano mostrado) y setCalendarViewShown (booleano mostrado) están obsoletos porque el estilo de material de calendario no admite la función.

Si desea utilizar el estilo material en el modo giratorio, use el widget DatePicker.

Aplique el estilo a continuación al elemento selector de fecha xml para obtener material giratorio. Para obtener más información sobre el datepicker y los estilos, consulte http://www.zoftino.com/android-datepicker-example .