Можно ли изменить стиль Android L TimePickerDialog?

Я тестировал свое приложение на эмуляторе Android L, и я заметил, что TimePickerDialog значительно изменился:

Android L TimePickerDialog

Это не соответствует теме моего приложения, и я хотел знать, можно ли получить старый стиль TimePickerDialog при работе на Android L.

Ответ 1

Вы можете использовать конструктор TimePickerDialog с параметром theme, чтобы указать тему.

TimePickerDialog(Context context, 
                 int theme, 
                 TimePickerDialog.OnTimeSetListener callBack, 
                 int hourOfDay, 
                 int minute, 
                 boolean is24HourView)

Ответ 2

Добавьте android: timePickerMode = "spinner" в XML

    <TimePicker
        android:id="@+id/timePicker1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:timePickerMode="spinner">
    </TimePicker>

https://developer.android.com/reference/android/R.attr.html#timePickerMode

Вы можете выбирать между режимами spinner или часов. Этот атрибут доступен только с уровня API 21, до этого единственным доступным был режим spinner.

Ответ 3

Если вы хотите, чтобы AM/PM был сборщиком вместо кнопки, я рекомендую использовать конструктор одиночных параметров с ContextThemeWrapper:

new TimePicker(new ContextThemeWrapper(getActivity(), android.R.style.Theme_Holo_Light_Dialog_NoActionBar));

AM-PM picker

Если вы передадите тему в конструктор нескольких параметров, тогда вы получите довольно уродливую кнопку AM/PM, и двоеточие будет отсутствовать между столбцами часов и минут.

new TimePicker(getActivity(), null, TimePickerDialog.THEME_HOLO_LIGHT);

AM-PM button

Ответ 4

Как сказал LordRaydenMK, используйте конструктор TimePickerDialog с параметром theme и предоставьте эту тему: android.R.style.CustomDatePickerDialog

И в вашем Styles.xml определите это:

  <style name="CustomDatePickerDialog"
         parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:dialogTheme">@style/MyDialogTheme</item>
    <item name="android:timePickerStyle">@style/MyDatePicker</item>
  </style>

  <style name="MyDialogTheme"
         parent="Theme.AppCompat.Light.Dialog">
    <item name="android:timePickerStyle">@style/MyDatePicker</item>
  </style>

  <style name="MyDatePicker"
         parent="@android:style/Widget.Material.Light.TimePicker">
    <item name="android:timePickerMode">spinner</item>
  </style>