2015-05-28 1 views
6

Я использую DialogFragment открыть DatePickerDialogНевозможно сделать мой DatePickerDialog использовать стиль спиннера программно

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

Я получаю календарь вид, где я предпочел бы спиннера вид.

Я пробовал:

datePickerDialog.getDatePicker().setCalendarViewShown(false); 

и

datePickerDialog.getDatePicker().setLayoutMode(1); 

, но он не работает.

Обратите внимание, что я хочу, чтобы прядильщик искал одно действие, но мне нужно, чтобы календарь был просмотрен для другого действия. Поэтому я не могу изменить весь стиль приложения. Мне нужен индивидуальный стиль для одного действия.

+0

Что вы должны работать. Вещи, которые заставляют вас идти hmmmm .... –

+0

[Этот ответ] (http://stackoverflow.com/a/33138181/2869508) работал для меня только с одной строкой. –

ответ

7

Я нашел объяснение в следующем посте (который описывает проблему, очень похожий на мой):

Android Material Design Inline Datepicker issue

На самом деле setCalendarViewShown (ложь) и setSpinnersShown (истина), по-видимому, не работает больше в последних версиях.

Мы должны использовать явный атрибут XML, такой как этот android: datePickerMode = "spinner".

Проблема в том, что я использую DialogFragment без какой-либо XML-макета (только диалог выбора даты). Поэтому я не могу установить какой-либо атрибут XML.

Решение заключается в создании специального пользовательского диалога с файлом макета XML с использованием запрашиваемого атрибута.

3

Вы можете сохранить его программно, не нужно создавать новый XML с блесной, я просто изменил мой (V21) стиль AppTheme и работал ;-)

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

помнить, чтобы сохранить поддержку < 21 просто добавив эту строку, эта команда игнорируется при> = 21

datePickerDialog.getDatePicker().setLayoutMode(1); 
Смежные вопросы