Android – Ocultar el campo de fecha en datepickerdialog

Cómo ocultar / eliminar el campo de fecha en datepickerdialog. En realidad, mi requisito es utilizar el diálogo de selección de fecha nativo, pero se muestra con día, mes y año. Pero según mi requisito necesito solamente mes y año. Así que quiero ocultar o eliminar el campo de día de la vista.

Cualquier ayuda será muy útil.

Private DatePickerDialog createDialogWithoutDateField(){ DatePickerDialog dpd = new DatePickerDialog(_activity, ExpiryDateSetListener,cyear,cmonth, cday); try{ Field[] datePickerDialogFields = dpd.getClass().getDeclaredFields(); for (Field datePickerDialogField : datePickerDialogFields) { if (datePickerDialogField.getName().equals("mDatePicker")) { datePickerDialogField.setAccessible(true); DatePicker datePicker = (DatePicker) datePickerDialogField.get(dpd); Field datePickerFields[] = datePickerDialogField.getType().getDeclaredFields(); for (Field datePickerField : datePickerFields) { if ("mDayPicker".equals(datePickerField.getName())) { datePickerField.setAccessible(true); Object dayPicker = new Object(); dayPicker = datePickerField.get(datePicker); ((View) dayPicker).setVisibility(View.GONE); } } } } }catch(Exception ex){ } return dpd; } 

Utilice el código anterior para ocultar el campo del día en DatePickerDialog.

Refiérase a este LINK

No recomiendo usar Reflection para hacer este tipo de cosas.

Hay una manera más simple y más bonita de hacerlo:

 ((ViewGroup) datePickerDialog.getDatePicker()).findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).setVisibility(View.GONE); 

Tenga en cuenta que el método .getDatePicker() de DatePickerDialog funciona en API LEVEL >= 11 .

El código fuente de DatePicker y DatePickerDialog están disponibles para que usted pueda clonar, refactorizar en su propio paquete y modificarlo para adaptarlo.

 ((ViewGroup) datePickerDialog.getDatePicker()).findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).setVisibility(View.GONE); 

Esto funciona correctamente

Lo siento, estoy tarde, pero he encontrado la respuesta perfecta de esa pregunta, se necesita todo un día para mí para encontrarlo, Así que estoy publicando mi mejor respuesta:

  private Calendar mCalendar; mCalendar = Calendar.getInstance();// Initialize Calendar 

Dialog_date_picker.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/rounded_corners" android:orientation="vertical" android:padding="8dp"> <DatePicker android:id="@+id/date_picker" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="4" android:calendarViewShown="false" android:datePickerMode="spinner" /> <Button android:id="@+id/date_time_set" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="@color/colorPrimary" android:text="Set" android:textColor="@color/colorWhite" /></LinearLayout> 

DialogMethod llamado Click:

 private void ExpiryDialog() { System.out.println("Inside Dialog Box"); final Dialog dialog = new Dialog(context); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.dialog_date_picker); dialog.show(); final DatePicker datePicker = (DatePicker) dialog.findViewById(R.id.date_picker); date_time_set = (Button) dialog.findViewById(R.id.date_time_set); datePicker.init(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH), null); LinearLayout ll = (LinearLayout) datePicker.getChildAt(0); LinearLayout ll2 = (LinearLayout) ll.getChildAt(0); ll2.getChildAt(1).setVisibility(View.INVISIBLE); date_time_set.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view){ dialog.dismiss(); Integer month = datePicker.getMonth()+1; Integer year = datePicker.getYear(); expMonth = (month.toString().length() == 1 ? "0"+month.toString():month.toString()); expYear = year.toString(); etExpiryDate.setText(expMonth + "/" + expYear); } }); } 

Estos trabajos del código y ocultar día en DatePicker, así que puedo mostrar la fecha de caducidad para las tarjetas. ¡¡Disfrutar!!

  Calendar c = Calendar.getInstance(); int mYear = c.get(Calendar.YEAR); int mMonth = c.get(Calendar.MONTH); int mDay = c.get(Calendar.DAY_OF_MONTH); DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), AlertDialog.THEME_HOLO_DARK, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { txtMonth.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year); } }, mYear, mMonth, mDay); ((ViewGroup) datePickerDialog.getDatePicker()).findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).setVisibility(View.GONE); datePickerDialog.show(); 

Refiera este acoplamiento Deshabilite la selección del día en el ejemplo del datepicker

No creo que necesites ir tan profundo a menos que quieras personalizarlo .. hay el:

 mDatePicker.getDatePicker().setCalendarViewShown(false); 

Que es una llamada muy legítima para eliminar el segmento de calendario.

  • ¿Cómo se establecen las fechas mínimas y máximas en un Android DatePicker?
  • Android - onCreateDialog se bloquea al devolver DatePickerDialog
  • Android DatePicker muestra meses no disponibles cuando se usan límites min / max
  • DatePicker con un fondo
  • ¿Cómo obtener la siguiente fecha cuando haga clic en el botón en android?
  • Cómo cambiar el texto en datepicker?
  • Casting y obtención de valores del selector de fecha y hora en android
  • Android cómo mostrar DatePicker en Fragmento?
  • Establecer fecha y hora seleccionador de fecha y hora en android
  • Datepicker da tiempo no entre excepciones
  • Cuando se utiliza datepicker en android 4.0 y superior .. cómo evitar la vista calendario
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.