日历时间选择 开始时间到结束时间

文章目录

  • 前言
  • 一、使用步骤
    • 1.编写activity_main.xml
    • 2.自定义日历样式 新建date.xml文件
    • 3.编写Java里MainActivity类
    • 4.Java里新建类DoubleDatePickerDialog
  • 总结

前言

1.效果图

一、使用步骤

1.编写activity_main.xml

代码如下(示例):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:orientation="vertical"><EditTextandroid:id="@+id/et"android:layout_width="fill_parent"android:layout_height="wrap_content"android:cursorVisible="false"android:editable="false" /><Buttonandroid:id="@+id/dateBtn"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="日期对话框"/>
</LinearLayout>

2.自定义日历样式 新建date.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="wrap_content"android:layout_height="wrap_content"android:paddingTop="10dp"android:gravity="center_vertical"><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center_horizontal"android:orientation="vertical"android:padding="5dip" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="开始日期" /><DatePickerandroid:id="@+id/datePickerStart"android:layout_width="wrap_content"android:layout_height="wrap_content"android:datePickerMode="spinner"android:calendarViewShown="false" /></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center_horizontal"android:orientation="vertical"android:padding="5dip" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="结束日期" /><DatePickerandroid:id="@+id/datePickerEnd"android:layout_width="wrap_content"android:layout_height="wrap_content"android:datePickerMode="spinner"android:calendarViewShown="false" /></LinearLayout>
</LinearLayout>

3.编写Java里MainActivity类

public class MainActivity extends AppCompatActivity {Button btn;TextView et;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn = findViewById(R.id.dateBtn);et = findViewById(R.id.et);btn.setOnClickListener(new View.OnClickListener() {Calendar c = Calendar.getInstance();@Overridepublic void onClick(View v) {// 最后一个false表示不显示日期,如果要显示日期,最后参数可以是true或者不用输入new DoubleDatePickerDialog(MainActivity.this, 0, new DoubleDatePickerDialog.OnDateSetListener() {@Overridepublic void onDateSet(DatePicker startDatePicker, int startYear, int startMonthOfYear,int startDayOfMonth, DatePicker endDatePicker, int endYear, int endMonthOfYear,int endDayOfMonth) {String textString = String.format("%d-%d-%d~%d-%d-%d ", startYear,startMonthOfYear + 1, startDayOfMonth, endYear, endMonthOfYear + 1, endDayOfMonth);et.setText(textString);}}, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE), true).show();}});}
}

4.Java里新建类DoubleDatePickerDialog

public class DoubleDatePickerDialog extends AlertDialog implements DialogInterface.OnClickListener , DatePicker.OnDateChangedListener {private static final String START_YEAR = "start_year";private static final String END_YEAR = "end_year";private static final String START_MONTH = "start_month";private static final String END_MONTH = "end_month";private static final String START_DAY = "start_day";private static final String END_DAY = "end_day";private final DatePicker mDatePicker_start;private final DatePicker mDatePicker_end;private final OnDateSetListener mCallBack;/*** The callback used to indicate the user is done filling in the date.*/public interface OnDateSetListener {void onDateSet(DatePicker startDatePicker, int startYear, int startMonthOfYear, int startDayOfMonth,DatePicker endDatePicker, int endYear, int endMonthOfYear, int endDayOfMonth);}/*** @param context*            The context the dialog is to run in.* @param callBack*            How the parent is notified that the date is set.* @param year*            The initial year of the dialog.* @param monthOfYear*            The initial month of the dialog.* @param dayOfMonth*            The initial day of the dialog.*/public DoubleDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) {this(context, 0, callBack, year, monthOfYear, dayOfMonth);}public DoubleDatePickerDialog(Context context, int theme, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) {this(context, 0, callBack, year, monthOfYear, dayOfMonth, true);}/*** @param context*            The context the dialog is to run in.* @param theme*            the theme to apply to this dialog* @param callBack*            How the parent is notified that the date is set.* @param year*            The initial year of the dialog.* @param monthOfYear*            The initial month of the dialog.* @param dayOfMonth*            The initial day of the dialog.*/public DoubleDatePickerDialog(Context context, int theme, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth, boolean isDayVisible) {super(context, theme);mCallBack = callBack;Context themeContext = getContext();setButton(BUTTON_POSITIVE, "确定", this);setButton(BUTTON_NEGATIVE, "取消", this);// setButton(BUTTON_POSITIVE,// themeContext.getText(android.R.string.date_time_done), this);setIcon(0);LayoutInflater inflater = (LayoutInflater) themeContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);View view = inflater.inflate(R.layout.date, null);setView(view);mDatePicker_start = (DatePicker) view.findViewById(R.id.datePickerStart);mDatePicker_end = (DatePicker) view.findViewById(R.id.datePickerEnd);mDatePicker_start.init(year, monthOfYear, dayOfMonth, this);mDatePicker_end.init(year, monthOfYear, dayOfMonth, this);// updateTitle(year, monthOfYear, dayOfMonth);// 如果要隐藏当前日期,则使用下面方法。if (!isDayVisible) {hidDay(mDatePicker_start);hidDay(mDatePicker_end);}}/*** 隐藏DatePicker中的日期显示** @param mDatePicker*/private void hidDay(DatePicker mDatePicker) {Field[] datePickerfFields = mDatePicker.getClass().getDeclaredFields();for (Field datePickerField : datePickerfFields) {if ("mDaySpinner".equals(datePickerField.getName())) {datePickerField.setAccessible(true);Object dayPicker = new Object();try {dayPicker = datePickerField.get(mDatePicker);} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();}// datePicker.getCalendarView().setVisibility(View.GONE);((View) dayPicker).setVisibility(View.GONE);}}}public void onClick(DialogInterface dialog, int which) {// Log.d(this.getClass().getSimpleName(), String.format("which:%d",// which));// 如果是“取 消”按钮,则返回,如果是“确 定”按钮,则往下执行if (which == BUTTON_POSITIVE)tryNotifyDateSet();}@Overridepublic void onDateChanged(DatePicker view, int year, int month, int day) {if (view.getId() == R.id.datePickerStart)mDatePicker_start.init(year, month, day, this);if (view.getId() == R.id.datePickerEnd)mDatePicker_end.init(year, month, day, this);// updateTitle(year, month, day);}/*** 获得开始日期的DatePicker** @return The calendar view.*/public DatePicker getDatePickerStart() {return mDatePicker_start;}/*** 获得结束日期的DatePicker** @return The calendar view.*/public DatePicker getDatePickerEnd() {return mDatePicker_end;}/*** Sets the start date.** @param year*            The date year.* @param monthOfYear*            The date month.* @param dayOfMonth*            The date day of month.*/public void updateStartDate(int year, int monthOfYear, int dayOfMonth) {mDatePicker_start.updateDate(year, monthOfYear, dayOfMonth);}/*** Sets the end date.** @param year*            The date year.* @param monthOfYear*            The date month.* @param dayOfMonth*            The date day of month.*/public void updateEndDate(int year, int monthOfYear, int dayOfMonth) {mDatePicker_end.updateDate(year, monthOfYear, dayOfMonth);}private void tryNotifyDateSet() {if (mCallBack != null) {mDatePicker_start.clearFocus();mDatePicker_end.clearFocus();mCallBack.onDateSet(mDatePicker_start, mDatePicker_start.getYear(), mDatePicker_start.getMonth(),mDatePicker_start.getDayOfMonth(), mDatePicker_end, mDatePicker_end.getYear(),mDatePicker_end.getMonth(), mDatePicker_end.getDayOfMonth());}}@Overrideprotected void onStop() {// tryNotifyDateSet();super.onStop();}@Overridepublic Bundle onSaveInstanceState() {Bundle state = super.onSaveInstanceState();state.putInt(START_YEAR, mDatePicker_start.getYear());state.putInt(START_MONTH, mDatePicker_start.getMonth());state.putInt(START_DAY, mDatePicker_start.getDayOfMonth());state.putInt(END_YEAR, mDatePicker_end.getYear());state.putInt(END_MONTH, mDatePicker_end.getMonth());state.putInt(END_DAY, mDatePicker_end.getDayOfMonth());return state;}@Overridepublic void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);int start_year = savedInstanceState.getInt(START_YEAR);int start_month = savedInstanceState.getInt(START_MONTH);int start_day = savedInstanceState.getInt(START_DAY);mDatePicker_start.init(start_year, start_month, start_day, this);int end_year = savedInstanceState.getInt(END_YEAR);int end_month = savedInstanceState.getInt(END_MONTH);int end_day = savedInstanceState.getInt(END_DAY);mDatePicker_end.init(end_year, end_month, end_day, this);}
}

总结

提示:如果ipad较大屏幕上面显示可把新建date.xml文件里面android:orientation="vertical"改为android:orientation="horizontal"改两个日历外面的布局

日历时间选择 开始时间到结束时间相关推荐

  1. easyui日期处理(开始时间和结束时间)

    easyui日期处理(开始时间和结束时间): <tr><td class="bis_pxzs_form_id_table_td">发证日期:</td& ...

  2. java方法,返回两个日期内的所有date集合,根据开始时间、结束时间得到两个时间段内所有的日期...

    在最近的项目中,有这么一个需求,根据开始时间.结束时间得到两个时间段内所有的日期,以下分享我的代码给大家. 1.以下的这个方法适用于jdk1.5以上的版本 /** * 根据开始时间和结束时间返回时间段 ...

  3. Java获取指定年月的开始时间和结束时间

    文章目录 Java获取指定年月的开始时间和结束时间 Java获取指定年月的开始时间和结束时间 // 获取指定年指定月的开始天数和结束天数public static Map<String,Date ...

  4. java根据开始时间和结束时间计算中间间隔日期

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; impo ...

  5. oracle 时间小于,jquery easyui 对于开始时间小于结束时间的判断示例

    对于开始时间小于结束时间的判断可以参考,jquery easyui里的ValidateBox进行判断 好吧!直接上代码 查看内容:按时间: 至 var varify;//用于查询验证,验证开始时间是否 ...

  6. 数据库中包含开始时间、结束时间,并且查询条件也有开始时间、结束时间的查询方法...

    分类: oracle学习 数据库 例:考试表中有两个字段:startDate.endDate,分别代表考试开始时间.结束时间.现在需要查询某一时间段内正在进行的考试,实际只要满足考试的时间段和查询条件 ...

  7. js获取下月时间_JS获取上月,本月,下月的开始时间与结束时间

    ``###JS获取上月,本月,下月的开始时间与结束时间(记录) //获取当天的时间 function getToday() { var date = new Date(); return date . ...

  8. 更改hadoop集群yarn的webui中的开始时间和结束时间为本地时间

    yarn集群的webui地址为:http://rm:8088 执行任务后,任务的开始时间和结束时间都是utc时间,查看很不方便. 查找相关资料发现hadoop有补丁包,补丁地址:https://iss ...

  9. 获取某一年指定自然周的开始时间和结束时间

    获取某一年指定自然周的开始时间和结束时间 package com.playmath.playmathcrm.util; import java.text.ParseException; import ...

  10. Java 某天的开始时间与结束时间

    需求中遇到"有效期"的时候就可能要用到一天的开始时间跟结束时间. 比如说:价格优惠活动,一件商品打折优惠期间是2016-11-18到2016-11-30,那么我们数据库存入的时间就 ...

最新文章

  1. 可控制转速CSS3旋转风车特效
  2. scanf family API 高级用法
  3. 电力期刊论文实现:微电网经济调度(程序讲解)
  4. Linux文件查找之find秘笈
  5. Cortex-M3 动态加载一(地址无关代码实现)
  6. Node.js 得到当前目录下文件修改文件名
  7. 李宏毅机器学习之Classification
  8. 自动化如何帮助全球共抗疫情?
  9. sap供应商主数据表_SAP供应商统驭科目调整操作说明
  10. 大型网页游戏开发流程
  11. ibm ilog mysql_IBM ILOG CPLEX Optimization Studio: 一个整数规划的案例
  12. 少年碎碎念:《追飞机的人》
  13. 中国电影院排行 API数据接口
  14. G2评选ManageEngine为UEM的高效执行者和创新领导者
  15. 【LeetCode 459 】重复的子字符串
  16. struts注解 配置拦截器 拦截器无效
  17. AT24C02和AT24C32的区别 I2C调试小技巧
  18. 计算机bios无法进入安全模式,电脑安全模式进不去怎么办 电脑安全模式进不去解决方法【图文】...
  19. 河南省南阳市谷歌高清卫星地图下载
  20. teamviewer v_p_n+xp v_p_n服务实现在家访问公司内部局域网

热门文章

  1. 东北大学OJ-1216: 实验2-6 :计算圆椎体体积
  2. 方锥体积的计算公式以及定义 初中高中数学
  3. 面试阿里,看这一篇就够了!
  4. 10.29 逻辑回归和交差熵
  5. 系统集成项目管理之项目合同管理
  6. 【tcp】网络连接中的长连接和短连接是什么意思?
  7. vpay软件系统开发
  8. 电脑如何更改设置本机IP地址
  9. oracle 中 使用 begin end 批量更新,删除资料
  10. oracle制造分销模块,oracle ebs表结构及功能总结(财务,制造,分销模块)