2015-02-20 9 views
6

ich eine Datepicker in einem DialogFragment zeigen wollte:Datepicker in einem DialogFragment ignoriert setCalendarViewShown

public class DatePickerDialogFragment extends DialogFragment { 
    private OnDateSetListener dateSetListener = null; 
    private String title = null; 

    public DatePickerDialogFragment() {} 

    public DatePickerDialogFragment(OnDateSetListener dateSetListener, String title) { 
     this.dateSetListener = dateSetListener; 
     this.title = title; 
    } 

    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     Calendar calendar = Calendar.getInstance(); 

     int year = calendar.get(Calendar.YEAR); 
     int month = calendar.get(Calendar.MONTH); 
     int day = calendar.get(Calendar.DAY_OF_MONTH); 

     DatePickerDialog datePickerDialog = new DatePickerDialog(this.getActivity(), this.dateSetListener, year, month, day); 
     datePickerDialog.getDatePicker().setCalendarViewShown(false); 
     datePickerDialog.setTitle(this.title); 

     return datePickerDialog; 
    } 
} 

Leider datePickerDialog.getDatePicker().setCalendarViewShown(false); ist komplett ignoriert. Ich hasse die Kalenderansicht, weil es hässlich und unbequem ist. Also, wie kann ich es deaktivieren?

+0

Versuchen Sie die Einstellung "android: calendarViewShown =" false "android: datePickerMode =" spinner "' in xml – Apurva

+0

Ich initialisiere meine Datepicker programmgesteuert und es sollte so bleiben. es gibt keine Option, um datePickerMode bei der Initialisierung programmgesteuert zu setzen – Mulgard

+0

Sie haben 'datePickerDialog.getDatePicker() gesetzt. setCalendarViewShown (false);' das wird nicht funktionieren für API <11 – Apurva

Antwort

10

In meiner "values-v21/styles.xml" habe ich Aktivitätsthema wie folgt geändert es ist Kalender & zeigt einfache Datepicker Spinner.

<item name="android:datePickerDialogTheme">@style/style_date_picker_dialog</item> 
</style> 


<style name="style_date_picker_dialog" parent="@android:style/Theme.DeviceDefault.Light"> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowBackground">@drawable/dialog_background</item> 
    <item name="android:datePickerStyle">@style/style_datepicker</item> 
</style> 

<style name="style_datepicker" parent="android:Widget.Material.Light.DatePicker"> 
    <item name="android:datePickerMode">spinner</item> 
</style> 
+1

Beste Antwort jemals, Sie haben mich gerade gerettet danke – Akariuz

0

Dies wurde beantwortet anderswo: Sie könnten eine ziehbar mit weißen Hintergrund & abgerundeten Ecken verwenden mögen Android Material Design Inline Datepicker issue, und mit der akzeptierten Antwort bekam mir nicht, wo zu lösen versuchen.

Grundsätzlich müssen Sie tun:

<DatePicker 
... 
android:datePickerMode="spinner" /> 

weil setCalandarShown(); ist veraltet.

+0

Wie Ist 'datePickerMode' im Java-Code gesetzt? –

+0

https://Stackoverflow.com/questions/34723495/how-to-set-datepickermode-spinner-programmatically – HaydenKai

+0

das @TashPemhiwa helfen könnte, aber diese Dinge scheinen derzeit nicht zuverlässig, besonders wenn sie rückwärtskompatibel sein müssen – HaydenKai

Verwandte Themen