日积月累:如何隐藏DatePicker的日期选择

在我们日常开发过程中,可能会遇见如信用卡有效期选择的需求,它指需要选择年、月。但是系统控件DatePicker默认是支持年、月和日的选择,如下图:

那么,我们如何才能使得日期选择器不显示呢,我们先来看看DatePicker的源代码:

在DatePicker源码中,拥有一个private成员NumberPicker变量mDaySpinner,这个应该就是用于日期选择的控件了。那么对于private的访问权限,当然难不倒我们,因为我们有强大的“反射”功能,下面看看实例代码;

MainActivity.java文件:

public classMainActivity extends Activity {
    privateButton button;
    @Override
    protectedvoid onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button= (Button) findViewById(R.id.button);
        button.setOnClickListener(newOnClickListener() {

            @Override
            publicvoid onClick(View v) {
                DatePickerdatePicker = new DatePicker(MainActivity.this);
                datePicker.setCalendarViewShown(false);

                //通过反射机制,访问private的mDaySpinner成员,并隐藏它
                try {
                    Field daySpinner =datePicker.getClass().getDeclaredField("mDaySpinner");
                    daySpinner.setAccessible(true);
                    ((View)daySpinner.get(datePicker)).setVisibility(View.GONE);
                } catch (NoSuchFieldException e) {
                    e.printStackTrace();
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }

                CalendarminCalendar = Calendar.getInstance();
                minCalendar.set(Calendar.HOUR_OF_DAY,0);
                minCalendar.set(Calendar.MINUTE,0);
                minCalendar.set(Calendar.SECOND,0);
                datePicker.setMinDate(minCalendar.getTimeInMillis());

                CalendarmaxCalendar = Calendar.getInstance();
                maxCalendar.add(Calendar.YEAR,1);
                datePicker.setMaxDate(maxCalendar.getTimeInMillis());

                CalendarcurCalendar = Calendar.getInstance();
                datePicker.init(curCalendar.get(Calendar.YEAR),
                curCalendar.get(Calendar.MONTH),
                curCalendar.get(Calendar.DAY_OF_MONTH),null);

                AlertDialog.Builderbuilder = new AlertDialog.Builder(MainActivity.this);
                builder.setView(datePicker);
                builder.setTitle("请选择有效期");
                builder.setPositiveButton("确定", null);

                AlertDialogdialog = builder.create();
                dialog.setCanceledOnTouchOutside(true);
                dialog.show();
            }
        });
    }
}

好了,运行一下,看看效果:

时间: 2024-08-01 17:45:27

日积月累:如何隐藏DatePicker的日期选择的相关文章

element-ui日期组件DatePicker设置日期选择范围Picker Options

element-UI提供了DatePicker日期选择器组件,可以让我们很方便的获取到日期,默认的选择是全部的日期都可以选择的,但是很多场景中我们要对日期选择范围做限定,比如出行日期就不能选过去的日期,订票时间要限制日期范围 官网提供了picker-options参数可以设置日期选择范围,具体操作看代码 // 页面引入组件, 加上picker-options这个参数 <el-date-picker v-model="exCheckDate" type="date&quo

HTML5 input date属性引起的探索——DatePicker(日期选择插件)

不得不说H5的input date属性真的好用,之前我写的http://www.cnblogs.com/tu-0718/p/6729274.html这篇博客里面也有提到,不过虽然移动端对H5的支持还是很好的,但是PC端浏览器对H5的支持就很让人无奈了.然后最近遇到一个需求:需要一个开始时间和结束时间,默认显示年月,如下图: 第一反应想到的是H5的input date属性,因为兼容性问题无奈放弃,然后发现了一个挺好用的插件:DatePicker, 注:在使用此插件时需要注意,DatePicker插

angularjs之ui-bootstrap的Datepicker Popup不使用JS实现双日期选择控件

最开始使用ui-bootstrap的Datepicker Popup日期选择插件实现双日期选择时间范围时,在网上搜了一些通过JS去实现的方法,不过后来发现可以不必通过JS去处理,只需要使用其自身的属性和参数即可实现,效果如下图(一截图就不显示鼠标的红色圆圈不可选的样式了...尴尬): 这里先附上我觉得简单易懂的JS实现方法,大家可以看看实现的原理: 以下代码就是最开始网上搜索的简单易懂的:http://www.cnblogs.com/tonghaolang/p/5972676.html <!DO

安卓开发中的双日期选择控件(可隐藏日,只显示年月)

在安卓开发中,会碰到选开始日期和结束日期的问题.特别是在使用Pad时,如果弹出一个Dialog,能够同时选择开始日期和结束日期,那将是极好的.我在开发中在DatePickerDialog的基础上做了修改,实现了这种Dialog.效果如下: 具体实现方法为: 先新建一个安卓项目DoubleDatePicker,在res/layout文件夹下新建date_picker_dialog.xml,内容如下: 1 <?xml version="1.0" encoding="utf-

react-native DatePicker日期选择组件的实现

本教程的实现效果如下: 为了实现其淡入/淡出的覆盖效果, 还有取消按钮, 在此用了一个三方的组件, 大家可以先安装一下: 三方组件的地址:https://github.com/eyaleizenberg/react-native-custom-action-sheet (可以看看,也可以直接按我的步骤走) 1. 在terminal的该工程目录下运行: npm install react-native-custom-action-sheet --save 2. 然后运行: npm start 3.

DatePicker - 日期选择插件

在一些WEB系统中,日期选择插件必不可少的功能,今天为大家分享几个不错的日期选择插件.希望对大家有所帮助. 1)My97DatePicker是一个更全面,更人性化,并且速度一流的日期选择控件.具有强大的日期范围限制功能:自定义事件和丰富的API库:多语言支持和自定义皮肤支持:跨无限级框架显示和自动选择显示位置. 主页: http://www.my97.net/dp/index.asp 演示地址: http://www.my97.net/dp/demo/index.htm 2)Date Range

Android滑动选择的日期选择框

效果图如下. 实现也很简单,使用的是Android的DatePicker控件.AlertDialog实现. 首先是布局文件:date_picker_dialog.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_widt

安卓开发_浅谈DatePicker(日期选择器)

DatePicker继承自FrameLayout类,日期选择控件的主要功能是向用户提供包含年.月.日的日期数据并允许用户对其修改.如果要捕获用户修改日期选择控件中的数据事件,需要为DatePicker添加OnDateChangedListener监听器. 示例: 一.全局模式 1.布局文件 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="htt

Android自定义View(RollWeekView-炫酷的星期日期选择控件)

转载请标明出处: http://blog.csdn.net/xmxkf/article/details/53420889 本文出自:[openXu的博客] 目录: 1分析 2定义控件布局 3定义CustomWeekView 4重写onMeasure 5点击后执行动画 7重置预备控件 源码下载 ??最近收到一个自定义控件的需求,需要做一个日期选择控件,实现图如下: ???? ??一次展示一个星期的5天,中间放大的为当前选中的:如果点击了其中一个日期,比如星期五,那么整体向左滑动,并将星期五慢慢放大