Android 自定义年月日日期选择器、时分时间选择器

实现效果:

日期选择器                                                                                       时间选择器

               

 

 

实现方法:

 

1、自定义选择器dialog

public class DatePickDialog extends Dialog implements OnChangeLisener {private TextView titleTv;private FrameLayout wheelLayout;private TextView cancel;private TextView sure;private TextView messgeTv;private TextView timete;private String title;private String format;private DateType type = DateType.TYPE_ALL;//开始时间private Date startDate = new Date();//年分限制,默认上下5年private int yearLimt = 5;private OnChangeLisener onChangeLisener;private OnSureLisener onSureLisener;private DatePicker mDatePicker;//设置标题public void setTitle(String title) {this.title = title;}//设置模式public void setType(DateType type) {this.type = type;}//设置选择日期显示格式,设置显示message,不设置不显示messagepublic void setMessageFormat(String format) {this.format = format;}//设置开始时间public void setStartDate(Date startDate) {this.startDate = startDate;}//设置年份限制,上下年份public void setYearLimt(int yearLimt) {this.yearLimt = yearLimt;}//设置选择回调public void setOnChangeLisener(OnChangeLisener onChangeLisener) {this.onChangeLisener = onChangeLisener;}//设置点击确定按钮,回调public void setOnSureLisener(OnSureLisener onSureLisener) {this.onSureLisener = onSureLisener;}public DatePickDialog(Context context) {super(context, R.style.dialog_style);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.cbk_dialog_pick_time);initView();initParas();}private DatePicker getDatePicker() {DatePicker picker = new DatePicker(getContext(), type);picker.setStartDate(startDate);picker.setYearLimt(yearLimt);picker.setOnChangeLisener(this);picker.init();return picker;}private void initView() {this.sure = (TextView) findViewById(R.id.sure);this.cancel = (TextView) findViewById(R.id.cancel);this.wheelLayout = (FrameLayout) findViewById(R.id.wheelLayout);this.titleTv = (TextView) findViewById(R.id.title);this.timete = (TextView) findViewById(R.id.timete);messgeTv = (TextView) findViewById(R.id.message);mDatePicker = getDatePicker();this.wheelLayout.addView(mDatePicker);//setValuethis.titleTv.setText(title);this.timete.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {setType(DateType.TYPE_HM);wheelLayout.removeAllViews();initView();}});this.titleTv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {setType(DateType.TYPE_YMD);wheelLayout.removeAllViews();initView();}});this.cancel.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {dismiss();}});this.sure.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String endtime = messgeTv.getText().toString();myLisener.onChanged(endtime);dismiss();if (onSureLisener != null) {onSureLisener.onSure(mDatePicker.getSelectDate());}}});}private MyLisener myLisener;public void setMyLisener(MyLisener onChangeLisener) {this.myLisener = onChangeLisener;}private void initParas() {WindowManager.LayoutParams params = getWindow().getAttributes();params.gravity = Gravity.BOTTOM;params.width = DateUtils.getScreenWidth(getContext());getWindow().setAttributes(params);}@Overridepublic void onChanged(Date date) {if (onChangeLisener != null) {onChangeLisener.onChanged(date);}if (!TextUtils.isEmpty(format)) {String messge = "";try {messge = new SimpleDateFormat(format).format(date);} catch (Exception e) {e.printStackTrace();}messgeTv.setText(messge);}}}

2、activity调用

private OnChangeLisener onChangeLisener;
private MyLisener myLisener;
        onChangeLisener =new OnChangeLisener() {@Overridepublic void onChanged(Date date) {String messge = "";try {
//                    messge = new SimpleDateFormat("HH:mm").format(date);messge = new SimpleDateFormat("yyyy-MM-dd").format(date);} catch (Exception e) {e.printStackTrace();}}};myLisener = new MyLisener() {@Overridepublic void onChanged(String date) {Log.i("lgq","...回来了...."+date);}};

3、起调方法

private void showDatePickDialog(DateType type) {DatePickDialog dialog = new DatePickDialog(this);//设置上下年分限制dialog.setYearLimt(5);//设置标题dialog.setTitle("选择时间");//设置类型dialog.setType(type);//设置消息体的显示格式,日期格式dialog.setMessageFormat("yyyy-MM-dd HH:mm");//设置选择回调dialog.setOnChangeLisener(onChangeLisener);dialog.setMyLisener(myLisener);//设置点击确定按钮回调dialog.setOnSureLisener(null);dialog.show();
}
  showDatePickDialog(DateType.TYPE_YMD);
//        showDatePickDialog(DateType.TYPE_HM);

 

demo链接:https://download.csdn.net/download/meixi_android/11434566

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

main.js中封装全局登录函数

main.js中封装全局登录函数 1. 在 main.js 中封装全局登录函数 通过 vue 对象的原型扩展,可以扩展一个函数,这样这个函数就可以在每一个界面通过类似指向对象的方式,去访问这个函数。 如下是 main.js 扩展的函数: Vue.prototype.…

Android 人脸照片对比,人脸对比

1、首先在百度云平台,注册账号,并且进行企业验证 https://console.bce.baidu.com/#/index/overview 2、进入人脸识别主页,创建应用 3、创建SDK授权应用 SDK与完整demo链接: demoCSDN链接:https://download.csdn.net…

uni-app第三方登陆-微信

uni-app第三方登陆-微信 结合上文全局登陆校验&#xff0c;实现微信授权登录官方手册地址&#xff1a; https://uniapp.dcloud.io/api/plugins/login?idgetuserinfo 一、书写两个界面 login.vue 用于用户登陆my.vue 我的界面&#xff0c;存放校验登陆的函数1.1 my.vue <sc…

Android获取屏幕尺寸,屏幕适配

获取屏幕尺寸&#xff1a; DisplayMetrics dm new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int w dm.widthPixels;//宽 int h dm.heightPixels;//高 Log.i("lgq","ww"w"....h"h); 输出&#xff1a;2019…

点击一百万次

在一个群里看到的题目&#xff0c;就找他要来玩儿了。http://120.24.86.145:9001/test/得点击一百万次图片才行。 可以看出&#xff0c;是通过jqeury发包操作点击量的&#xff0c;所以只需要发一个包控制点击量就ok了 转载于:https://www.cnblogs.com/nul1/p/8611341.html

基于token与基于服务器的身份认证

基于token与基于服务器的身份认证 1、基于服务器的身份认证 我们清楚 http 协议是无状态的&#xff0c;也就是说&#xff0c;如果我们已经认证了一个用户&#xff0c;那么他下一次请求的时候&#xff0c;服务器不知道我是谁&#xff0c;我们就必须要再次认证。 我们与浏览器交…

Android 视频通话

基于腾讯云视频SDK 实现效果 实现步骤&#xff1a; 1、登录腾讯云开发者平台 https://cloud.tencent.com/product/trtc 2、进入 实时音视频 主页。并创建应用 进入实时音视频方法&#xff1a;点击——控制台——>云产品 3、进入开发辅助主页&#xff0c;创建uid 第四…

c++的作业2

本题再次加深了我对于素数与非素数的认识&#xff0c;以及学会了控制每行素数的个数。 本题&#xff0c;让我再一次加深对于是switch的用法&#xff0c;case中只能是常量表达式&#xff0c; break&#xff0c;continue都适用于三种循环结构&#xff0c;即&#xff0c;for&#…

开箱一个docker

开箱一个docker 1、docker 的出现&#xff1f; 1.1、环境切换配置麻烦 通常我们在开发环境写好代码&#xff0c;打个war/jar包&#xff0c;扔到tomcat下&#xff0c;就算是跑起来了&#xff1b;但是扔到生产环境就挂了&#xff0c;what&#xff1f;各种错误。。。 1.2、应用之…

jedis jedispool Redistemplate

jedis jedispool Redistemplate 整理了之前学习 redis 的笔记&#xff0c;强烈建议看最后总结。 在大型系统数据读请求中&#xff0c;基本上90%都可以通过分布式缓存集群来抗下来&#xff0c;而 Redis 又是分布式缓存集群的主要践行者&#xff0c;因此了解 Redis 是必不可少的…

支付宝支付提示 4006 ISV权限不足,建议在开发者中心检查签约是否已经生效

解决方法非常简单&#xff1a; 1、首先登录支付宝商家中心&#xff1a;https://b.alipay.com/index.htm 查看产品中心&#xff0c;对应功能有木有开通&#xff0c;或者签约开通 2、登录支付宝开放平台&#xff1a;https://open.alipay.com/platform/home.htm 查看应用功能列…

android 自定义相机,Camera,相机遮罩层

实现效果&#xff1a; 实现方法&#xff1a;一个自定义view实现demo 一、自定义相机Camera&#xff0c;无API版本限制 &#xff08;1&#xff09;。实现接口 implements SurfaceHolder.Callback private SurfaceView mView;private Camera mCamera; private int cameraId 0;/…

RedisTemplate在项目中的应用

RedisTemplate在项目中的应用 如下主要通去年无聊做的 "涂涂影院后台管理系统" 一个 demo&#xff0c;看 RedisTemplate 的使用。 主要用到地方&#xff1a;视频首页轮播图的获取&#xff0c;以及搜索检索界面&#xff0c;如下图所示&#xff1a; 由于是非maven非sp…