2015-05-28 16 views
6

sto usando un DialogFragment per aprire una DatePickerDialogimpossibile fare il mio DatePickerDialog utilizzare uno stile di programmazione filatore

public class DatePickerFragment extends DialogFragment{ 

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


    // Create a new instance of DatePickerDialog and return it 
    DatePickerDialog DatePickerDialog = new DatePickerDialog(getActivity(), (ProfileCreationActivity)getActivity(), year, month, day); 
    return DatePickerDialog; 
} 

sto ottenendo uno sguardo di calendario, dove io preferirei uno sguardo filatrice.

ho provato:

datePickerDialog.getDatePicker().setCalendarViewShown(false); 

e

datePickerDialog.getDatePicker().setLayoutMode(1); 

ma non funziona.

Si prega di notare che voglio che il filatore cerchi una sola attività, ma che voglio la vista del calendario per un'altra attività. Quindi non posso cambiare l'intero stile dell'applicazione. Ho bisogno di uno stile personalizzato per un'attività.

+0

Quello che devi funzionare. Cose che ti fanno andare hmmmm .... –

+0

[Questa risposta] (http://stackoverflow.com/a/33138181/2869508) ha funzionato per me con una sola riga. –

risposta

7

Ho trovato una spiegazione nel seguente post (che descrive un problema molto simile al mio):

Android Material Design Inline Datepicker issue

Infatti il ​​setCalendarViewShown (false) e setSpinnersShown (vero) sono apparentemente non funziona più nelle ultime versioni.

Dobbiamo utilizzare un attributo XML esplicito come questo android: datePickerMode = "spinner".

Il problema è che sto usando un DialogFragment senza alcun layout XML (solo una finestra di selezione data). Quindi non posso impostare alcun attributo XML.

La soluzione è creare una finestra di dialogo personalizzata dedicata con un file di layout XML utilizzando l'attributo richiesto.

3

È possibile mantenere programatically, non è necessario creare un nuovo XML con l'ogiva, ho semplicemente cambiato la mia (V21) stile AppTheme e ha lavorato ;-)

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="colorControlActivated">@color/colorPrimary</item> 
    <item name="android:timePickerDialogTheme">@style/PickerDialogCustom</item> 
    <item name="android:datePickerDialogTheme">@style/PickerDialogCustom</item> 
    <item name="alertDialogTheme">@style/AlertDialogCustom</item> 
</style> 

<style name="PickerDialogCustom" parent="AlertDialogCustom"> 
    <item name="android:textColor">@color/colorPrimary</item> 
    <item name="android:textColorPrimary">@color/colorPrimaryDark</item> 
    <item name="colorControlNormal">@color/greyLight500</item> 
    <item name="android:layout_margin">2dp</item> 
    <item name="android:datePickerMode">spinner</item> 
</style> 

<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorAccent">@color/colorPrimary</item> 
    <item name="android:positiveButtonText">@color/colorPrimary</item> 
    <item name="android:negativeButtonText">@color/greyDark200</item> 
    <item name="buttonBarNegativeButtonStyle">@style/negativeButton</item> 
    <item name="android:datePickerStyle">@style/PickerDialogCustom</item> 
</style> 

ricordarsi di mantenere il supporto per < 21 solo aggiungendo questa riga, questo comando viene ignorato per> = 21

datePickerDialog.getDatePicker().setLayoutMode(1);