JDJ
JDJ

Reputation: 4328

Is it possible to change the style of an Android L TimePickerDialog?

I was testing my app on an Android L emulator, and I noticed that the TimePickerDialog has significantly changed to this:

Android L TimePickerDialog

This doesn't fit with the theme of my app, and I wanted to know if it is possible to get the old TimePickerDialog style when running on Android L.

Upvotes: 21

Views: 44176

Answers (5)

Prateek Sharma
Prateek Sharma

Reputation: 372

You can use android:timePickerMode attribute in the XML.

For more info: Read Here

Upvotes: -3

David Riha
David Riha

Reputation: 1436

As LordRaydenMK said, use the TimePickerDialog constructor with theme parameter and provide this theme: android.R.style.CustomDatePickerDialog

And in your Styles.xml define this:

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

Upvotes: 11

yehyatt
yehyatt

Reputation: 2414

Add android:timePickerMode="spinner" to the 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

You can choose between spinner or clock modes. This attribute is only available from API level 21, before that the spinner mode was the only option available.

Upvotes: 43

LordRaydenMK
LordRaydenMK

Reputation: 13321

You can use the TimePickerDialog constructor with theme parameter to specify the theme.

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

Upvotes: 16

Dan J
Dan J

Reputation: 25673

If you want the AM / PM to be a picker instead of a button then I recommend you use the single parameter constructor with a ContextThemeWrapper:

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

AM-PM picker

If you pass the theme into the multiple parameter constructor then you'll end up with a rather ugly AM / PM button, and the colon will be missing between the hour and minute columns.

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

AM-PM button

Upvotes: 16

Related Questions