带有 AppCompat 的 Android Material Design Datepicker

Posted

技术标签:

【中文标题】带有 AppCompat 的 Android Material Design Datepicker【英文标题】:Android Material Design Datepicker with AppCompat 【发布时间】:2015-02-06 09:39:20 【问题描述】:

我正在尝试使用 AppCompat 将新的 android 5.0 Material Design Datepicker 添加到我的 5.0 之前的应用程序中。我添加了

compile "com.android.support:appcompat-v7:21.0.0"

到我的 build.gradle 文件并将我的主题更新为:

<?xml version="1.0" encoding="utf-8"?>

<style name="AppTheme.Base" parent="@style/Theme.AppCompat.Light">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>

但 Datepicker 仍然是这样的: 而不是这样:

谁能告诉我如何让新的日期选择器在 5.0 之前的设备上工作?

提前致谢。

【问题讨论】:

你不能,除非你自己移植它...... @Selvin ic,谢谢。 Spinner、Checkbox 等确实可以与 appcombat 一起使用。 android 碎片越来越可笑和烦人。 你不应该担心这些细节...... Pre 5.0 android的用户不知道新的日期选择器:-)......你应该很高兴compat库存在并且你不知道'不必担心更重要的东西,如片段、操作栏...... @Selvin 是的,也许你是对的。谢谢。 正如我所写,您可以尝试移植它...来自 android 21 源的 Fx... 【参考方案1】:

更新:

正如 jfcartier 所指出的,现在还有MaterialDateTimePicker。它可能比下面的解决方案更好,因为它有一个很好的主题 API。


你可以试试android-betterpickers 库。它有一个CalendarDatePickerDialog 小部件,看起来像你想要的。它提供了浅色和深色主题,但要自定义颜色,您必须将其添加为库项目并自己更改代码。

将库添加到项目后,使用非常简单。

    // Create date picker listener.
    CalendarDatePickerDialog.OnDateSetListener dateSetListener = new CalendarDatePickerDialog.OnDateSetListener() 
        @Override
        public void onDateSet(CalendarDatePickerDialog dialog, int year, int monthOfYear, int dayOfMonth) 
            // Set date from user input.
            Calendar date = Calendar.getInstance();
            date.set(Calendar.HOUR_OF_DAY, 9);
            date.set(Calendar.MINUTE, 0);
            date.set(Calendar.YEAR, year);
            date.set(Calendar.MONTH, monthOfYear);
            date.set(Calendar.DAY_OF_MONTH, dayOfMonth);

            // Do as you please with the date.
        
    ;

    // Create dismiss listener.
    CalendarDatePickerDialog.OnDialogDismissListener dismissListener = new CalendarDatePickerDialog.OnDialogDismissListener() 
        @Override
        public void onDialogDismiss(DialogInterface dialoginterface) 
            // Do something when the user dismisses the dialog.
        
    ;

    // Show date picker dialog.
    CalendarDatePickerDialog dialog = new CalendarDatePickerDialog();
    dialog.setOnDateSetListener(dateSetListener);
    dialog.setOnDismissListener(dismissListener);
    dialog.setThemeDark(false);
    dialog.show(getSupportFragmentManager(), "DATE_PICKER_TAG");

最终结果应该是这样的(抱歉质量差)。

【讨论】:

如何在这个库中将自定义样式设置为 calederpickerdialog?我们怎样才能改变颜色和所有?请帮忙。 @Sajal 您需要下载源代码并将其作为库添加到您的项目中。然后你可以通过代码自定义任何你想要的东西。您还可以尝试通过在项目中创建具有相同名称的资源来覆盖颜色和样式,但这是一种更有限的方法。 为我工作,除了 onDismissListener。 谢谢@jfcartier!对于像我这样的初学者:如果您使用@jfcartier 链接 - 您应该导入“com.wdullaer.materialdatetimepicker.date.DatePickerDialog;”、“com.wdullaer.materialdatetimepicker.time.RadialPickerLayout;”和“com.wdullaer.materialdatetimepicker.time.TimePickerDialog;”在您使活动识别相关代码。 我找不到 CalendarDatePickerDialog 但 CalendarDatePickerDialogFragment 对我来说很好。【参考方案2】:

材质组件是日期选择器的推荐方式

使用Material Components for Android,您可以使用新的MaterialDatePicker

将以下内容添加到您的 build.gradle

implementation 'com.google.android.material:material:1.1.0'

对于 kotlin

 val builder = MaterialDatePicker.Builder.datePicker()
 val picker = builder.build()
 picker.show(parentFragmentManager, "date_picker_tag")

对于 Java

   MaterialDatePicker.Builder<Long> builder = 
   MaterialDatePicker.Builder.datePicker();
   MaterialDatePicker<Long> picker = builder.build();
   picker.show(getSupportFragmentManager(), picker.toString());

支持以下配置

肖像 - 模式日期选择器

横向模式日期选择器

日期范围选择器

移动输入选择器

其他参考

Here是官方设计指南

一个完整的演示应用可以找到here

【讨论】:

谢谢,但您忘记描述选择日期听众。见ahsensaeed.com/…。 解释如何使用这个东西的官方文档是残酷的。 material.io/develop/android/components/picker【参考方案3】:

我喜欢this 图书馆。它是Flavien Laurent Date and Time Picker 的克隆,并做了一些改进。它们都基于Official Google Date and Time Picker for Android 4.3+,但适用于Android 2.1+。

【讨论】:

以上是关于带有 AppCompat 的 Android Material Design Datepicker的主要内容,如果未能解决你的问题,请参考以下文章

Android 5.0 Lollipop 中的 ActionMode ActionBar 样式(带有 AppCompat)

带有 appcompat 的 Xamarin Android 使我的所有文本变为白色

Android Studio:我还可以在清单中使用带有appcompat主题的HOLO Light DatePicker吗?

使用 AppCompat 为 Android 中的按钮着色

AndroidX:Appcompat I:艺术错误 android.view.View$OnUnhandledKeyEventListener

使用带有新工具栏的选项卡 (AppCompat v7-21)