Java 在API 21中以编程方式从日期选择器隐藏日历视图

Java 在API 21中以编程方式从日期选择器隐藏日历视图,java,android,datepicker,Java,Android,Datepicker,我遇到了与此线程相同的问题:,但我没有使用XML布局,而是以编程方式构建日期选择器 这是我正在使用但不起作用的代码 DatePicker dpView = new DatePicker(ctx); dpView.setCalendarViewShown(false); dpView.setSpinnersShown(true); 如何使其工作?Android 5.0中的问题是确定是否使用日历的“模式”在构建时读取,而在代码中,只有在构建完成后才能设置模式,因此为时已晚。(来源如下:) 我的解决

我遇到了与此线程相同的问题:,但我没有使用XML布局,而是以编程方式构建日期选择器

这是我正在使用但不起作用的代码

DatePicker dpView = new DatePicker(ctx);
dpView.setCalendarViewShown(false);
dpView.setSpinnersShown(true);

如何使其工作?

Android 5.0中的问题是确定是否使用日历的“模式”在构建时读取,而在代码中,只有在构建完成后才能设置模式,因此为时已晚。(来源如下:)

我的解决方案是创建自己的可重用DatePicker布局,指定“无日历”模式,并使用该布局(而不是Android的默认布局)以编程方式构建我的日期时间

底线是,创建一个“DatePicker.axml”文件,将其放入resources文件夹,并粘贴以下内容:


Android 5.0中的问题是,在构建时读取决定是否使用日历的“模式”,而在代码中,只有在构建完成后才能设置模式,因此为时已晚。(来源如下:)

我的解决方案是创建自己的可重用DatePicker布局,指定“无日历”模式,并使用该布局(而不是Android的默认布局)以编程方式构建我的日期时间

底线是,创建一个“DatePicker.axml”文件,将其放入resources文件夹,并粘贴以下内容:


如果必须在DatePickerFragment中以编程方式进行设置,只需设置以下内容:

DatePickerDialog dialog = new DatePickerDialog(getActivity(),android.R.style.Theme_Holo_Dialog_MinWidth, this, year, month, day);

使用您喜欢的任何样式。

如果必须在DatePickerFragment中以编程方式进行设置,只需设置以下内容:

DatePickerDialog dialog = new DatePickerDialog(getActivity(),android.R.style.Theme_Holo_Dialog_MinWidth, this, year, month, day);

使用您喜欢的任何样式。

我只是更改了我的AppTheme(v21)样式,然后工作:

<style name="AppTheme"  parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="colorControlActivated">@color/colorPrimary</item>
    <item name="android:timePickerDialogTheme">@style/PickerDialogCustom</item>
    <item name="android:datePickerDialogTheme">@style/PickerDialogCustom</item>
    <item name="alertDialogTheme">@style/AlertDialogCustom</item>
</style>

<style name="PickerDialogCustom" parent="AlertDialogCustom">
    <item name="android:textColor">@color/colorPrimary</item>
    <item name="android:textColorPrimary">@color/colorPrimaryDark</item>
    <item name="colorControlNormal">@color/greyLight500</item>
    <item name="android:layout_margin">2dp</item>
    <item name="android:datePickerMode">spinner</item>
</style>

<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:positiveButtonText">@color/colorPrimary</item>
    <item name="android:negativeButtonText">@color/greyDark200</item>
    <item name="buttonBarNegativeButtonStyle">@style/negativeButton</item>
    <item name="android:datePickerStyle">@style/PickerDialogCustom</item>
</style>

@颜色/原色
@颜色/原色暗
@颜色/颜色重音
@颜色/原色
@样式/选择器对话框自定义
@样式/选择器对话框自定义
@样式/警报对话框自定义
@颜色/原色
@颜色/原色暗
@彩色/灰色灯光500
2dp
纺纱机
@颜色/原色
@颜色/原色
@颜色/原色
@颜色/灰色标记200
@样式/负片按钮
@样式/选择器对话框自定义

我只是简单地改变了AppTheme(v21)的风格,然后工作:

<style name="AppTheme"  parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="colorControlActivated">@color/colorPrimary</item>
    <item name="android:timePickerDialogTheme">@style/PickerDialogCustom</item>
    <item name="android:datePickerDialogTheme">@style/PickerDialogCustom</item>
    <item name="alertDialogTheme">@style/AlertDialogCustom</item>
</style>

<style name="PickerDialogCustom" parent="AlertDialogCustom">
    <item name="android:textColor">@color/colorPrimary</item>
    <item name="android:textColorPrimary">@color/colorPrimaryDark</item>
    <item name="colorControlNormal">@color/greyLight500</item>
    <item name="android:layout_margin">2dp</item>
    <item name="android:datePickerMode">spinner</item>
</style>

<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:positiveButtonText">@color/colorPrimary</item>
    <item name="android:negativeButtonText">@color/greyDark200</item>
    <item name="buttonBarNegativeButtonStyle">@style/negativeButton</item>
    <item name="android:datePickerStyle">@style/PickerDialogCustom</item>
</style>

@颜色/原色
@颜色/原色暗
@颜色/颜色重音
@颜色/原色
@样式/选择器对话框自定义
@样式/选择器对话框自定义
@样式/警报对话框自定义
@颜色/原色
@颜色/原色暗
@彩色/灰色灯光500
2dp
纺纱机
@颜色/原色
@颜色/原色
@颜色/原色
@颜色/灰色标记200
@样式/负片按钮
@样式/选择器对话框自定义
添加到来自用户的:

主题
theme.Holo.Dialog
theme.Holo.Dialog.MinWidth
可能会导致诸如在日期选择器周围绘制两个框之类的问题

相反,您应该使用theme
theme.Holo.Dialog.NoFrame来防止这种情况。主题可能无法从代码中访问,因此只需创建自己的主题:

<style name="DatePickerDialogTheme" parent="android:Theme.Holo.Light.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowFrame">@null</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowAnimationStyle">@null</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowCloseOnTouchOutside">false</item>
</style>

@android:彩色/透明
@空的
@空的
@空的
错误的
符合事实的
符合事实的
错误的
编辑:解决此问题的更好方法是使用重新创建旧设计的。

添加到来自用户的:

主题
theme.Holo.Dialog
theme.Holo.Dialog.MinWidth
可能会导致诸如在日期选择器周围绘制两个框之类的问题

相反,您应该使用theme
theme.Holo.Dialog.NoFrame来防止这种情况。主题可能无法从代码中访问,因此只需创建自己的主题:

<style name="DatePickerDialogTheme" parent="android:Theme.Holo.Light.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowFrame">@null</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowAnimationStyle">@null</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowCloseOnTouchOutside">false</item>
</style>

@android:彩色/透明
@空的
@空的
@空的
错误的
符合事实的
符合事实的
错误的


编辑:解决此问题的更好方法是使用重新创建旧设计的方法。

Hi@JHawkzz,我就是这么做的,但我忘了发布答案,谢谢,无论如何我都会将此标记为答案,因为它:)酷!谢谢你的标记,很高兴你能猜出来@JHawkzz你能更详细地解释一下吗?特别是充气部分?我们如何将其集成到DialogFragment中?还有为什么axml??android:datePickerMode=“spinner”在android 7.0Hi@JHawkzz上不起作用,我就是这么做的,但我忘了发布答案,谢谢,反正我会把这个标记为答案,因为它:)酷!谢谢你的标记,很高兴你能猜出来@JHawkzz你能更详细地解释一下吗?特别是充气部分?我们如何将其集成到DialogFragment中?以及为什么axml??android:datePickerMode=“spinner”无法在android 7.0上运行,并使用DatePickerDialog测试了此解决方案。如果有人对日期选择器周围的两个框或其他样式问题有问题,请查看。非常感谢!用于材料设计。现在已弃用。使用DatePickerDialog尝试并测试此解决方案。如果有人对日期选择器周围的两个框或其他样式问题有问题,请查看。非常感谢!用于材料设计。不推荐使用。没有其他替代解决方案:设置微调器模式对所有APIsHere无效。其他解决方案:设置微调器模式对所有APISHEME.Holo.Dialog无效。不推荐使用HEME.Holo.Dialog