如何在Material Design android中自定义TimePicker?

问题描述 投票:0回答:3

我无法更改选择器颜色和时间选择器的其他部分。 到目前为止,我可以更改标题颜色和背景,但无法更改内圆和文本颜色。

更改自定义主题链接

我的代码:

<TimePicker
    android:id="@+id/tp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:timePickerMode="clock"
    android:headerBackground="#565466"
    android:amPmBackgroundColor="#500126"
    android:numbersBackgroundColor="#57e326"
    android:numbersTextColor="#995394"
    android:numbersSelectorColor="#675543"
    android:textColorSecondary="#897530"
    android:textColorPrimary="#359875"
/>
android android-theme android-timepicker
3个回答
23
投票

基本模式

您所要做的就是在活动主题中设置强调色:

<item name="colorAccent">#3333cc</item>

这将为您设置所有颜色,这样您就不会弄乱样式。

这也意味着您不应该直接在 TimePicker 上设置像

amPmBackgroundColor
这样的值,让 Android 为您做这些事情。

高级模式

如果您想单独指定所有可能的值,请执行以下操作:

首先在您的活动主题中定义它:

<item name="android:timePickerStyle">@style/Theme.MyTheme.TimePicker</item>

然后创建合适的样式:

<style name="Theme.MyTheme.TimePicker" parent="android:Widget.Material.Light.TimePicker">
    <item name="android:timePickerMode">clock</item>
    <item name="android:headerBackground">#ff555555</item>
    <item name="android:numbersTextColor">?android:attr/textColorPrimaryActivated</item>
    <item name="android:numbersInnerTextColor">?android:attr/textColorSecondaryActivated</item>
    <item name="android:numbersSelectorColor">?android:attr/colorControlActivated</item>
    <item name="android:numbersBackgroundColor">#ff555555</item>
    <item name="android:amPmTextColor">?android:attr/textColorSecondary</item>
</style>

请注意,

numbersInnerTextColor
仅适用于API级别23,其他样式(例如
headerTextColor
)无法设置(或者至少我无法使其工作)。

我建议不要使用“高级”模式,因为 TimePicker 应具有与包含的 Activity 相同的颜色,否则可能会对您的用户体验产生不良影响。


7
投票

TimePicker 材质风格:

具有自定义颜色的TimePickerDialog材质样式

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

TimePicker 小部件样式

<style name="MyTimePickerWidgetStyle" parent="@android:style/Widget.Material.TimePicker">
    <item name="android:headerBackground">#ffe082</item>
    <item name="android:numbersTextColor">#b71c1c</item>
    <item name="android:numbersInnerTextColor">#f44336</item>
    <item name="android:numbersSelectorColor">#33691e</item>
    <item name="android:numbersBackgroundColor">#ef9a9a</item>
    <item name="android:amPmTextColor">#9c27b0</item>
</style>

有关 TimePicker 的更多信息,请参阅 http://www.zoftino.com/android-timepicker-example


0
投票

对于材质 3 设计,您必须使用以下属性来更改颜色和使用

<style name="ThemeOverlay.PChart.Material3TimePicker" parent="ThemeOverlay.Material3.MaterialTimePicker">
    <item name="colorSurface">@color/white_fade</item>
    <item name="colorOnSurfaceVariant">@color/darkCyan</item>
    <item name="colorOnSurface">@color/gray_faded_AA</item>
    <item name="colorPrimary">@color/darkCyan</item>
    <item name="colorOnPrimaryContainer">@color/white</item>
    <item name="colorPrimaryContainer">@color/darkCyan</item>
</style>

在 kotlin 代码中

val picker =
        MaterialTimePicker.Builder()
            .setTheme(R.style.ThemeOverlay_PChart_Material3TimePicker)
            .setInputMode(INPUT_MODE_CLOCK)
            .setTimeFormat(TimeFormat.CLOCK_24H)
            .setHour(initialHour)
            .setMinute(initialMinute)
            .setTitleText(title)
            .build()
© www.soinside.com 2019 - 2024. All rights reserved.