Is it possible to change the style of an Android L TimePickerDialog?
Solution 1
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)
Solution 2
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.
Solution 3
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));
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);
Solution 4
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>
Related videos on Youtube
JDJ
Updated on August 06, 2021Comments
-
JDJ almost 3 years
I was testing my app on an Android L emulator, and I noticed that the TimePickerDialog has significantly changed to this:
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.
-
JDJNow I can use a TimePicker that doesn't look like it was designed by a child clown.
-
LordRaydenMKhave you tried using the constructor with theme parameter? developer.android.com/reference/android/app/…, int, android.app.TimePickerDialog.OnTimeSetListener, int, int, boolean)
-
-
Zharf almost 10 yearsIs there a default theme that would give back the old version?
-
LordRaydenMK almost 10 years@Zharf For HOLO look and feel you can use
TimePickerDialog.THEME_HOLO_DARK
orTimePickerDialog.THEME_HOLO_LIGHT
astheme
parametar -
Zharf almost 10 yearsunfortunately it doesn't change the widget back to the style you see in ICS through Kitkat :(
-
Lieuwe almost 9 yearsThere is no timePickerMode as far as I am aware. You can only do this for a datepicker (where it is called 'android:datePickerMode').
-
yehyatt almost 9 yearsThere is actually a timePicker , http://developer.android.com/reference/android/widget/TimePicker.html , The code about is from a working example .
-
Lieuwe almost 9 yearsI didn't say there is no TimePicker. I said that I believe there is no android:timePickerMode (and the link you provide indeed makes no mention of this)
-
yehyatt almost 9 yearsSorry for the previous link , but am pretty sure there is a timePickerMode, its available from API Level 21 and here is the correct link developer.android.com/reference/android/…
-
Lieuwe almost 9 yearsNice one - that feature is well hidden. Note that using the style you also have the classic option (with the buttons) available and not just clock or spinner.
-
Kyle Huang over 7 years@Lieuwe Pretty sure there is a timePickerMode. Please verify before you make your statement as this answer is actual the one that works.
-
Vadim Kotov almost 5 years@LordRaydenMK these theme IDs are now deprecated
-
LordRaydenMK almost 5 years@VadimKotov well, things changed in 5 years.
-
djdance about 3 yearsIt works. Note, it doesn't work if just set android:timePickerMode inside theme