我试图为sdk 21+(Lollipop)设置TimePickerDialog的样式。到目前为止,我已经找到了如何更改XML中的默认colorscheme:
<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>
这有效,但我正在为我可以更改的所有属性寻找指南或文档。
但是,例如,我需要更改&#39;标题中的大文字。对话框(显示当前所选时间的位置)?
是否有一些文档列出了您可以更改的所有内容?
答案 0 :(得分:18)
在深入研究AOSP主题和样式xml文件以及大量谷歌搜索后,我取得了一些进展。我现在能够设置大多数(!)的东西。
所以这是一个部分答案,而不是所有的方式。但在这里我走了多远:
你可以看到我现在能够设置标题,un(!)选择的时间部分(在这种情况下为分钟),圆圈,该圆圈中的数字以及&#39;手&# 39; (或选择器)。哦,按钮也有样式。
让我解释一下我是如何让事情发挥作用的,首先:重要的是你不能直接从你的应用主题或者(警报)对话框主题/风格中覆盖事物。你必须从一个到另一个,可以这么说。
示例:
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>
因为如果你想在标题中设置样式(好吧,时间,实际上),你需要定义headerTimeTextAppearance:
<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 in AOSP styles.xml(ctrl-f&#39; timepicker&#39;直到找到它),您会注意到一堆其他属性,您应该能够修改:
headerTimeTextAppearance headerAmPmTextAppearance headerSelectedTextColor headerBackground numbersTextColor numbersBackgroundColor amPmTextColor amPmBackgroundColor amPmSelectedBackgroundColor numbersSelectorColor
其中大部分工作(只要您为每个人提供&#39; android:&#39;)但我无法获得&#39; headerSelectedTextColor&#39;上班。我收到一个编译错误,说&#34;无法匹配属性bla bla&#34;。另外,如果你看一下我上面的例子,我将textSize硬编码为&#39; headerTimeTextAppearance&#39;属性因为&#39; @ dimen / timepicker_ampm_label_size&#39;价值引发了错误。
简而言之:上面列出了大部分内容以及如何使它们正常工作。但并非一切都很清楚。所以我仍然可以看到完整的文档/指南:)
答案 1 :(得分:1)
下面是自定义颜色的Android TimePicker素材样式,您可以看到http://www.zoftino.com/android-timepicker-example的TimePicker用法和样式。
<style name="MyAppThemeFour" parent="Theme.AppCompat.Light">
<item name="android:timePickerDialogTheme">@style/MyTimePickerDialogStyle</item>
</style>
<style name="MyTimePickerDialogStyle" parent="@style/ThemeOverlay.AppCompat.Dialog.Alert">
<item name="showTitle">false</item>
<item name="colorControlActivated">#ffd600</item>
<item name="colorAccent">#b71c1c</item>
<item name="android:textColorPrimary">#43a047</item>
<item name="android:textColorSecondary">#f44336</item>
</style>