带有日期选择器的 Android 微调器,例如 Google 日历应用

Posted

技术标签:

【中文标题】带有日期选择器的 Android 微调器,例如 Google 日历应用【英文标题】:Android spinner with date picker, like Google Calendar app 【发布时间】:2012-03-13 11:55:00 【问题描述】:

我正在尝试获取一个看起来像微调器的文本框来激活日期选择器对话框。这是在 ICS 上的 Google 日历应用和联系人应用(用于生日)中完成的。我是否需要使用微调器,如果需要,如何将其输入视图更改为日期选择器?或者如果没有,我如何让文本视图具有通常表示微调器的小三角形?

【问题讨论】:

另外,我知道如何显示日期选择器对话框,我好像缺少了一些东西来使它看起来像他们拥有的那样。我希望它在视觉上与我的其他表单完美契合。 【参考方案1】:

Twaddington 对他的回答的评论实际上是正确的方法。 您需要的是创建一个文本视图并应用样式

style="@android:style/Widget.DeviceDefault.Light.Spinner"

然后你可以在文本视图上创建一个点击监听器并使用它来打开一个 DatePickerDialog。这可以如下所示完成:https://***.com/a/8127571/332738 (如果你按照这个例子,记得给DatePickerDialogFragment添加一个默认构造函数,这样你的应用就不会在旋转时崩溃)

【讨论】:

有关如何将 DialogFragments 与 DatePickerDialog 一起使用的完整示例,请参阅我写的一篇博文:codinguser.com/2012/06/time-and-date-inputs-in-android 正是我想要的!比试图弄乱 Spinners 更容易。谢谢! 请注意,您应该将DeviceDefault.Light 替换为适合您应用主题的任何内容。 假设意图也是用用户选择的日期更新该视图中的文本?【参考方案2】:

我不知道你是否还需要这个。但在通讯录应用中,它是通过以下方式实现的:

<Button
    ...
    style="?android:attr/spinnerStyle"
    ... />

这应该适用于所有 Android 版本,因为它从 api 级别 1 开始可用: http://developer.android.com/reference/android/R.attr.html#spinnerStyle

【讨论】:

【参考方案3】:

我不确定这是否是您要问的,但您应该可以关注 Android 开发者网站上的 Date Picker tutorial。

另外,DatePicker 和 DatePickerDialog 类可能值得一看。

【讨论】:

谢谢。我确实知道如何实现日期选择器,但在示例中,它是通过单击按钮而不是从类似微调器的文本视图(这是我想要的)中调出的。 好吧,您应该能够从任何 View 类型的 onClick 侦听器中激活 Dialog。因此,您需要做的只是设置视图(可能是 TextView)的样式,就像他们在您提到的应用程序中所做的那样。我认为没有内置的样式或视图可以为您执行此操作。您可以尝试将 Android 微调器样式应用于基本 TextView 并查看是否有效:android.R.style.Widget_Spinner 是的,完美!设置样式正是我想要的。谢谢! @twaddington 您的评论实际上是针对所问问题的正确方法(比实际答案更重要)。 @Dash 您使用哪种样式来获得与 Google 在其日历应用中使用的微调器样式一样的效果,以弹出 TimePickers 和 DatePickers?【参考方案4】:

我更喜欢像谷歌联系人这样的 Spinner 主题。

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:spinnerStyle">@style/AppTheme.Form.Spinner</item>
        <item name="android:spinnerItemStyle">@style/AppTheme.Form.Spinner.Item</item>
    </style>

    <!-- Spinner Styles -->
    <style name="AppTheme.Form.Spinner" parent="Widget.AppCompat.Spinner">
        <item name="android:paddingRight">0dp</item>
        <item name="android:paddingEnd">0dp</item>
    </style>
    <style name="AppTheme.Form.Spinner.Item" parent="Widget.AppCompat.EditText">
        <item name="android:clickable">false</item>
    </style>
</resources>

【讨论】:

以上是关于带有日期选择器的 Android 微调器,例如 Google 日历应用的主要内容,如果未能解决你的问题,请参考以下文章

Android - 如何在一个活动中禁用多个微调器的特定项目

android中onItemSelected微调器的问题

当其他微调器更改时保持微调器选择

带有加载微调器的 jQuery 验证

Android-XML 自定义微调器

以编程方式设置微调器的选定项