Я пытаюсь создать TimePickerDialog для sdk 21+ (Lollipop). До сих пор я выяснил, как изменить цветовую схему по умолчанию в XML:
<style name="TimePickerTheme" parent="@style/Theme.AppCompat.Light.Dialog"> <item name="colorPrimary">#ff2d6073</item> <!-- no effect --> <item name="colorPrimaryDark">#ff2d6073</item> <!-- no effect --> <item name="colorAccent">#ff2d6073</item> <item name="android:textColor">#ffD0D102</item> <item name="android:textColorPrimary">#ffD0D102</item> </style>
Это работает, но я ищу руководство или документацию для всех свойств, которые я могу изменить.
Но какое свойство, например, мне нужно изменить большой текст в «заголовке» диалога (где отображается текущее выбранное время)?
Есть ли какая-то документация, в которой перечислены все возможные вещи, которые вы можете изменить?
После копания в тему AOSP и стиль xml-файлов и множество поисковых запросов я добился определенного прогресса. Теперь я могу создать большинство (!) Вещей.
Так что это частичный ответ, еще не все. Но вот как далеко я получил:
Вы можете видеть, что теперь я могу задавать заголовок, un (!) Выбранную часть времени (минуты в этом случае), круг, числа в этом круге и «руку» (или селектор). О, и кнопки тоже стилизованы.
Позвольте мне объяснить, как я начал работать, во-первых: важно то, что вы не можете переопределять вещи непосредственно из темы вашего приложения ИЛИ из темы / стиля диалога (предупреждения). Вы должны идти от одного к другому, так сказать.
Пример:
AndroidManifest.xml: настройка пользовательской темы для приложения и / или действия
<activity> android:theme="@style/Theme.MyTheme" </activity>
Values-v21 / styles.xml: (где находится ваша настраиваемая тема): установите timePickerDialogTheme
<style name="Theme.MyTheme" parent="@style/Theme.AppCompat.Light"> <item name="android:timePickerDialogTheme">@style/TimePickerDialogTheme</item> </style>
Затем ниже этого определите timePickerDialogTheme и установите timePickerStyle:
<style name="TimePickerDialogTheme" parent="@style/Theme.AppCompat.Light.Dialog"> <item name="colorAccent">#ff2d6073</item> <!-- colorAccent here seems to work just fine? --> <item name="android:timePickerStyle">@style/TimePickerDialogStyle</item> </style>
Теперь вы можете определить большую часть стиля здесь.
<style name="TimePickerDialogStyle" parent="@android:style/Widget.Material.Light.TimePicker"> <item name="colorAccent">#ff2d6073</item> <!-- colorAccent here seems to work just fine? --> <item name="android:timePickerMode">clock</item> <item name="android:headerBackground">#ff2d6073</item> <item name="android:headerTimeTextAppearance">@style/TextAppearance.TimePickerDialogStyle.TimeLabel</item> <!-- TimePicker Time *TextAppearance* --> <item name="android:numbersTextColor">#ff000000</item> <item name="android:numbersSelectorColor">#ff2d6073</item> <item name="android:numbersBackgroundColor">#ffdddddd</item> </style>
Важная строка в приведенном выше примере:
<item name="android:headerTimeTextAppearance">@style/TextAppearance.TimePickerDialogStyle.TimeLabel</item>
Поскольку, если вы хотите стилизовать текст (ну, время, фактически) в заголовке, вам нужно определить заголовокTimeTextAppearance:
<style name="TextAppearance.TimePickerDialogStyle.TimeLabel" parent="@android:style/TextAppearance.Material"> <item name="android:textSize">60sp</item> <!-- from --> <item name="android:textColor">#ffD0D102</item> </style>
Теперь, если вы посмотрите на Widget.Material.TimePicker в AOSP styles.xml (ctrl-f 'timepicker', пока не найдете его), вы заметите множество других свойств, которые вы сможете изменить:
HeaderTimeTextAppearance headerAmPmTextAppearance headerSelectedTextColor headerBackground numbersTextColor numbersBackgroundColor amPmTextColor amPmBackgroundColor amPmSelectedBackgroundColor numbersSelectorColor
Большинство из них работают (до тех пор, пока вы добавляете «android:» для каждого из них), но я не мог заставить «headerSelectedTextColor» работать. Я получил ошибку компиляции, говоря что-то вроде «не может соответствовать свойству bla bla». Кроме того, если вы посмотрите на мой пример выше, я жестко закодировал textSize для свойства 'headerTimeTextAppearance', потому что значение '@ dimen / timepicker_ampm_label_size' запустило ошибки.
Вкратце: большинство вещей перечислены выше и как заставить их работать. Но не все понятно. Поэтому я все еще вижу, что полная документация / руководство 🙂