转--一款漂亮实用的Android开源日期控件timessquare
这个开源控件可以兼容到SDK8版本,可以自定义显示的年月日,以及时间范围,如图
如果我们只想显示两个月的日期选择区间:
final Calendar month = Calendar.getInstance(); month.add(Calendar.MONTH, 1);
然后初始化时候可以传进去一些参数
1 final CalendarPickerView dialogView = (CalendarPickerView) getLayoutInflater() 2 .inflate(R.layout.dialog, null, false); 3 if (text.getText().toString().equals("")) { 4 dialogView.init(new Date(), month.getTime()).withSelectedDate(new Date()); 6 } else { 7 Date date = DateUtils.getDate(text.getText().toString(), "yyyy-MM-dd"); 9 dialogView.init(new Date(), month.getTime()).withSelectedDate(date); 11 }
其中withSelectedDate(date)表示指定当前显示的日期,可以自定义。
具体Demo代码
1 package com.example.timesample; 2 3 import java.util.Calendar; 4 import java.util.Date; 5 import java.util.GregorianCalendar; 6 7 import com.squareup.timessquare.CalendarPickerView; 8 import com.squareup.timessquare.CalendarPickerView.SelectionMode; 9 10 import android.os.Bundle; 11 import android.app.Activity; 12 import android.app.AlertDialog; 13 import android.content.DialogInterface; 14 import android.util.Log; 15 import android.view.Menu; 16 import android.view.View; 17 import android.view.View.OnClickListener; 18 import android.widget.Button; 19 import android.widget.TextView; 20 import android.widget.Toast; 21 22 public class MainActivity extends Activity { 23 24 private Button btn; 25 private TextView text; 26 27 @Override 28 protected void onCreate(Bundle savedInstanceState) { 29 super.onCreate(savedInstanceState); 30 setContentView(R.layout.activity_main); 31 btn = (Button) findViewById(R.id.button1); 32 text = (TextView) findViewById(R.id.textView1); 33 34 final Calendar nextYear = Calendar.getInstance(); 35 nextYear.add(Calendar.YEAR, 1); 36 final Calendar month = Calendar.getInstance(); 37 month.add(Calendar.MONTH, 1); 38 39 btn.setOnClickListener(new OnClickListener() { 40 41 @Override 42 public void onClick(View v) { 43 // TODO Auto-generated method stub 44 45 final CalendarPickerView dialogView = (CalendarPickerView) getLayoutInflater() 46 .inflate(R.layout.dialog, null, false); 47 if (text.getText().toString().equals("")) { 48 dialogView.init(new Date(), month.getTime()) 49 .withSelectedDate(new Date()); 50 } else { 51 Date date = DateUtils.getDate(text.getText().toString(), 52 "yyyy-MM-dd"); 53 dialogView.init(new Date(), month.getTime()) 54 .withSelectedDate(date); 55 } 56 57 new AlertDialog.Builder(MainActivity.this) 58 .setTitle("时间选择控件") 59 .setView(dialogView) 60 .setNeutralButton("返回", 61 new DialogInterface.OnClickListener() { 62 @Override 63 public void onClick( 64 DialogInterface dialogInterface, 65 int i) { 66 dialogInterface.dismiss(); 67 } 68 }) 69 .setPositiveButton("确定", 70 new DialogInterface.OnClickListener() { 71 @Override 72 public void onClick( 73 DialogInterface dialogInterface, 74 int i) { 75 long sd = dialogView.getSelectedDate() 76 .getTime(); 77 Date dat = new Date(sd); 78 GregorianCalendar gc = new GregorianCalendar(); 79 gc.setTime(dat); 80 java.text.SimpleDateFormat format = new java.text.SimpleDateFormat( 81 "yyyy-MM-dd "); 82 String sb = format.format(gc.getTime()); 83 System.out.println(sb); 84 text.setText(sb); 85 dialogInterface.dismiss(); 86 } 87 }).create().show(); 88 } 89 }); 90 91 } 92 93 @Override 94 public boolean onCreateOptionsMenu(Menu menu) { 95 // Inflate the menu; this adds items to the action bar if it is present. 96 getMenuInflater().inflate(R.menu.main, menu); 97 return true; 98 } 99 100 }
当前这个简单小Demo仅仅实现了其强大功能的一小部门,timessquare时间控件还支持选择时间段等强大功能,需要用到可以看源码。
Demo下载
分类:
控件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术