2012-05-20 12 views
9

Come nascondere/rimuovere il campo data in datepickerdialog. In realtà il mio requisito è di usare la finestra di dialogo di selezione data nativa ma si presenta con giorno, mese e anno. Ma secondo la mia esigenza ho bisogno solo di mesi e anni. Quindi voglio nascondere o rimuovere il campo del giorno dalla vista.Android - Nascondi il campo data in datepickerdialog

Qualsiasi aiuto sarà molto utile.

risposta

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; 

} 

Utilizzare il codice sopra riportato per nascondere il campo giorno in DatePickerDialog.

consultare questo codice LINK

+11

Questa è una raccomandazione vile. La risposta più affidabile è quella di lanciare il tuo. Anche se vuoi giocare a giochi script-kiddie come quello che viene proposto qui, non usare reflection - prendi i widget particolari tramite 'getDatePicker()' e 'findViewById()' e imposta la loro visibilità in questo modo. Entrambi gli approcci fanno ipotesi su implementazioni interne che potrebbero non essere valide su versioni del sistema operativo Android o modifiche del firmware OEM, ma almeno l'approccio 'findViewById()' farà meno ipotesi (e probabilmente sarà più veloce). – CommonsWare

+0

@CommonsWare oh ok grazie per il suggerimento –

+0

funziona solo dalle versioni 3.2 e successive di Android –

-2

Non credo che avete bisogno di andare in profondità che a meno che non si vuole personalizzare .. c'è il:

mDatePicker.getDatePicker().setCalendarViewShown(false); 

che è una chiamata molto legittima per rimuovere il segmento calendario.

10

Non è consigliabile utilizzare Reflection per fare questo genere di cose.

C'è un modo più semplice e più bella per farlo:

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

essere consapevoli del fatto che .getDatePicker() metodo dal DatePickerDialog opere API LEVEL >= 11.

+3

Ciò causerà un'eccezione di puntatore nullo sui dispositivi lollipop poiché utilizzano un diverso layout di selezione della data. –

+0

A quanto pare funziona per me. In esecuzione su lecca-lecca. –

+2

In Nougat non funziona –

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 invitato 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); 
     } 
    }); 
} 

Questo codice funziona e si nasconde la giornata in un DatePicker, quindi posso mostrare Data di scadenza per le carte. Godere!!

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

riferiscono questo link Disable day selection on datepicker example

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

Questo funziona correttamente

+1

Altri commenti su ciò che il codice potrebbe essere utile. –

+0

Su Android 6.0.1, ottengo una NullPointerException. – SH7890

Problemi correlati