2012-05-20 12 views
9

Cómo ocultar/eliminar el campo de fecha en datepickerdialog. En realidad, mi requisito es utilizar el cuadro de diálogo de selector de fecha nativo, pero aparece con día, mes y año. Pero según mi requisito, solo necesito mes y año. Por lo tanto, quiero ocultar o eliminar el campo del día de la vista.Android - Ocultar campo de fecha en datepickerdialog

Cualquier ayuda será de mucha utilidad.

Respuesta

4
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.

Consulte el código LINK

+11

Esta es una recomendación vil. La respuesta más confiable es tirar la tuya. Incluso si quieres jugar juegos de script kiddie como los que se proponen aquí, no uses el reflejo, obtén los widgets particulares a través de 'getDatePicker()' y 'findViewById()' y establece su visibilidad de esa manera. Ambos enfoques hacen suposiciones sobre implementaciones internas que pueden no ser válidas en versiones de sistema operativo Android o modificaciones de firmware OEM, pero al menos el enfoque 'findViewById()' hará menos suposiciones (y probablemente se ejecute más rápido). – CommonsWare

+0

@CommonsWare oh bien, gracias por la sugerencia –

+0

solo funciona desde las versiones 3.2 y posteriores de Android –

-2

No creo que necesita ir tan profunda menos que quiera personalizarlo .. no es el:

mDatePicker.getDatePicker().setCalendarViewShown(false); 

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

10

No recomiendo usar Reflection para hacer este tipo de cosas.

Existe una manera más sencilla y más bonita de hacerlo:

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

Sé consciente de que .getDatePicker() método de DatePickerDialog trabajos sobre API LEVEL >= 11.

+3

Esto causará una excepción de puntero nulo en los dispositivos de piruletas ya que usan un diseño diferente de selector de fecha. –

+0

Aparentemente está funcionando para mí. Corriendo en piruleta. –

+2

En Nougat no funciona –

0
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 llamada en 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); 
     } 
    }); 
} 

Este código funciona y oculta el día en un DatePicker, por lo que puede mostrar la fecha de caducidad de las tarjetas. ¡¡Disfrutar!!

0
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(); 

refieren este enlace Disable day selection on datepicker example

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

Esto funciona correctamente

+1

Algunos comentarios más sobre lo que hace el código serían útiles. –

+0

En Android 6.0.1, obtengo una NullPointerException. – SH7890

Cuestiones relacionadas