`
dss16694
  • 浏览: 148431 次
社区版块
存档分类
最新评论

Android中日期控件

 
阅读更多

DatePicker:

 

java.lang.Object
   ↳ android.view.View
     ↳ android.view.ViewGroup
       ↳ android.widget.FrameLayout
         ↳ android.widget.DatePicker

 

DatePicker是一个选择日期的控件。

与DataPicker相似的一个控件是TimePicker,用法相同.


 

如何使用DatePicker:

1、先写一个布局,该布局中包含一个TextView用来显示日期,另有一个Button,用来显示DatePicker控件。

 

[xhtml:showcolumns] view plaincopy
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="wrap_content"  
  4.     android:layout_height="wrap_content"  
  5.     android:orientation="vertical">  
  6.     <TextView android:id="@+id/dateDisplay"  
  7.         android:layout_width="wrap_content"  
  8.         android:layout_height="wrap_content"  
  9.         android:text=""/>  
  10.     <Button android:id="@+id/pickDate"  
  11.         android:layout_width="wrap_content"  
  12.         android:layout_height="wrap_content"  
  13.         android:text="改变日期"  
  14.        />  
  15. </LinearLayout>  
 

 

2、产生一个DatePicker的对话框,在主activity中:

[java:showcolumns] view plaincopy
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. public class DatePickerDemo extends Activity {  
  2.     private TextView text = null;  
  3.     private Button button = null;  
  4.     //用来保存年月日:  
  5.     private int mYear;  
  6.     private int mMonth;  
  7.     private int mDay;  
  8.     //声明一个独一无二的标识,来作为要显示DatePicker的Dialog的ID:  
  9.     static final int DATE_DIALOG_ID = 0;  
  10.     /** Called when the activity is first created. */  
  11.     @Override  
  12.     public void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         setContentView(R.layout.main);  
  15.         text = (TextView)findViewById(R.id.dateDisplay);  
  16.         button = (Button)findViewById(R.id.pickDate);  
  17.         //给button添加事件监听器:  
  18.         button.setOnClickListener(new OnClickListener() {  
  19.               
  20.             @Override  
  21.             public void onClick(View v) {  
  22.                 //调用Activity类的方法来显示Dialog:调用这个方法会允许Activity管理该Dialog的生命周期,  
  23.                 //并会调用 onCreateDialog(int)回调函数来请求一个Dialog  
  24.                 showDialog(DATE_DIALOG_ID);  
  25.             }  
  26.         });  
  27.         //获得当前的日期:  
  28.         final Calendar currentDate = Calendar.getInstance();  
  29.         mYear = currentDate.get(Calendar.YEAR);  
  30.         mMonth = currentDate.get(Calendar.MONTH);  
  31.         mDay = currentDate.get(Calendar.DAY_OF_MONTH);  
  32.         //设置文本的内容:  
  33.         text.setText(new StringBuilder()  
  34.                     .append(mYear).append("年")  
  35.                     .append(mMonth + 1).append("月")//得到的月份+1,因为从0开始  
  36.                     .append(mDay).append("日"));  
  37.     }  
  38.       
  39. }  

 

这时候当运行程序,点击按键时,会报错:

此时程序应该运行到activity调用showDialog方法,该方法会触发当前activity的onCreateDialog()回调函数的调用,所以我们应该重写当前activity的onCreateDialog()函数,并在其内实例化一个DatePickerDialog,实例化DatePickerDialog需要为其指定事件监听器,所以我们还要为其提供一个事件监听器,完整的activity代码如下:

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. import java.util.Calendar;  
  2. import android.app.Activity;  
  3. import android.app.DatePickerDialog;  
  4. import android.app.Dialog;  
  5. import android.app.DatePickerDialog.OnDateSetListener;  
  6. import android.os.Bundle;  
  7. import android.view.View;  
  8. import android.view.View.OnClickListener;  
  9. import android.widget.Button;  
  10. import android.widget.DatePicker;  
  11. import android.widget.TextView;  
  12. public class DatePickerDemo extends Activity {  
  13.     private TextView text = null;  
  14.     private Button button = null;  
  15.     //用来保存年月日:  
  16.     private int mYear;  
  17.     private int mMonth;  
  18.     private int mDay;  
  19.     //声明一个独一无二的标识,来作为要显示DatePicker的Dialog的ID:  
  20.     static final int DATE_DIALOG_ID = 0;  
  21.     /** Called when the activity is first created. */  
  22.     @Override  
  23.     public void onCreate(Bundle savedInstanceState) {  
  24.         super.onCreate(savedInstanceState);  
  25.         setContentView(R.layout.main);  
  26.         text = (TextView)findViewById(R.id.dateDisplay);  
  27.         button = (Button)findViewById(R.id.pickDate);  
  28.         //给button添加事件监听器:  
  29.         button.setOnClickListener(new OnClickListener() {  
  30.               
  31.             @Override  
  32.             public void onClick(View v) {  
  33.                 //调用Activity类的方法来显示Dialog:调用这个方法会允许Activity管理该Dialog的生命周期,  
  34.                 //并会调用 onCreateDialog(int)回调函数来请求一个Dialog  
  35.                 showDialog(DATE_DIALOG_ID);  
  36.             }  
  37.         });  
  38.         //获得当前的日期:  
  39.         final Calendar currentDate = Calendar.getInstance();  
  40.         mYear = currentDate.get(Calendar.YEAR);  
  41.         mMonth = currentDate.get(Calendar.MONTH);  
  42.         mDay = currentDate.get(Calendar.DAY_OF_MONTH);  
  43.         //设置文本的内容:  
  44.         text.setText(new StringBuilder()  
  45.                     .append(mYear).append("年")  
  46.                     .append(mMonth + 1).append("月")//得到的月份+1,因为从0开始  
  47.                     .append(mDay).append("日"));  
  48.     }  
  49.       
  50.       
  51.     //需要定义弹出的DatePicker对话框的事件监听器:  
  52.     private DatePickerDialog.OnDateSetListener mDateSetListener =new OnDateSetListener() {  
  53.             public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {  
  54.                 mYear = year;  
  55.                 mMonth = monthOfYear;  
  56.                 mDay = dayOfMonth;  
  57.                 //设置文本的内容:  
  58.                 text.setText(new StringBuilder()  
  59.                             .append(mYear).append("年")  
  60.                             .append(mMonth + 1).append("月")//得到的月份+1,因为从0开始  
  61.                             .append(mDay).append("日"));  
  62.             }  
  63.         };  
  64.     /** 
  65.      * 当Activity调用showDialog函数时会触发该函数的调用: 
  66.      */  
  67.     @Override  
  68.     protected Dialog onCreateDialog(int id) {  
  69.            switch (id) {  
  70.             case DATE_DIALOG_ID:  
  71.                 return new DatePickerDialog(this,mDateSetListener,mYear, mMonth, mDay);  
  72.             }  
  73.             return null;  
  74.     }  
  75. }  

 

这样,成功运行,效果如下:

 


 


3、还有另一种方式产生DatePicker的对话框,这种方式的思路是将DatePicker控件单独作为一个activity,并由主activity对其发出请求,当选择好日期后,用户点击确定键时,DatePicker的activity会将日期返回给主activity。但是我们希望DatePicker以对话框的形式出现,这就需要我们修改DatePicker的activity的风格属性android:theme

看例子:

首先新建一个activity:如何建:在资源文件的layout目录下定义一个xml文件作为布局文件(datepicker.xml):

 

[xhtml:showcolumns] view plaincopy
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="wrap_content"  
  4.     android:layout_height="wrap_content"  
  5.     android:orientation="vertical">  
  6.  <DatePicker  
  7.      android:id="@+id/myDatePicker"  
  8.      android:layout_width="wrap_content"  
  9.      android:layout_height="wrap_content"  
  10.        
  11.  />  
  12.  <Button android:id="@+id/mybutton"  
  13.         android:layout_width="fill_parent"  
  14.         android:layout_height="wrap_content"  
  15.         android:text="确定"  
  16.        />  
  17. </LinearLayout>  
 

 

定义一个类(DataPickerActivity)继承自Activity,重写其onCreate()函数,并在其内部加载布局文件:

 

[java:showcolumns] view plaincopy
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. public class DatePickerActivity extends Activity {  
  2.     private Button button = null;  
  3.     private DatePicker datePicker = null;  
  4.     //用来保存年月日:  
  5.     private int mYear;  
  6.     private int mMonth;  
  7.     private int mDay;  
  8.     @Override  
  9.     protected void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         setContentView(R.layout.datepicker);  
  12.         button = (Button)findViewById(R.id.mybutton);  
  13.         datePicker  = (DatePicker)findViewById(R.id.myDatePicker);  
  14.         button.setOnClickListener(new OnClickListener() {  
  15.               
  16.             @Override  
  17.             public void onClick(View v) {  
  18.                 //待添加  
  19.             }  
  20.         });  
  21.     }  
  22. }  
 

 

在AndroidManifest.xml文件中声明新的Activity:

 

[xhtml:showcolumns] view plaincopy
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="com.tjx"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  7.         <activity android:name=".DatePickerDemo"  
  8.                   android:label="@string/app_name">  
  9.             <intent-filter>  
  10.                 <action android:name="android.intent.action.MAIN" />  
  11.                 <category android:name="android.intent.category.LAUNCHER" />  
  12.             </intent-filter>  
  13.         </activity>  
  14.         <activity android:name=".DatePickerActivity"  
  15.                   android:label="@string/app_name"  
  16.                   android:theme = "@android:style/Theme.Dialog">  
  17.         </activity>  
  18.     </application>  
  19.     <uses-sdk android:minSdkVersion="7" />  
  20. </manifest>   
 

 

注意DatePickerActivity的<activity>元素有一个属性android:theme = "@android:style/Theme.Dialog" 声明该activity以对话框形式出现。这时候我们可以在主activity中发送一个intent来获取结果,这里要用到Activity的startActivityForResult()获得结果数据,我引用了些别人的东西来说明获得结果数据的方法步骤:

 


 

有两个Activity,A,B,由A启动B,并传数据给B,B在经过处理后把数据传回给A。举个例子,A是主程序,B是设置参数的Activity,在B修改设置后,要让A重新读取设置,就要用到回传数据.主要是两个函数startActivityForResult onActivityResult
先是A传B:

 

[java:showcolumns] view plaincopy
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. Bundle bd = new Bundle();  
  2.             bd.putString("Dir""/sdcard/");  
  3.     Intent intent=new Intent();  
  4.     intent.putExtras(bd);  
  5.         intent.setClass(main.this,location.class);  
  6.     startActivityForResult(intent,2);  
  7.            //这里的2是我随便写的,代表requestCode,就是用来做个标记,网上的例子好像都是写requestCode,  
  8.        //结果我在测试时A没接收到,这里必须填正数  
 

 

然后就是B接收再传回:

 

[java:showcolumns] view plaincopy
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. Intent it = new Intent();   
  2. it.putExtra("Dir",(String) tv1.getText());  
  3. setResult(2, it);//2与前面的A里的2对应  
  4. finish();  
 

 

A里的接收代码:

 

[java:showcolumns] view plaincopy
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  2.     //B返回时触发  
  3.     }  
 

 


接下来修改我们的代码

在主activity中需要调用startActivityForResult 函数来发送请求intent,并重写onActivityResult回调函数来获得返回的结果:

[java:showcolumns] view plaincopy
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. public class DatePickerDemo extends Activity {  
  2.     private TextView text = null;  
  3.     private Button button = null;  
  4.     //用来保存年月日:  
  5.     private int mYear;  
  6.     private int mMonth;  
  7.     private int mDay;  
  8.     /** Called when the activity is first created. */  
  9.     @Override  
  10.     public void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.main);  
  13.         text = (TextView)findViewById(R.id.dateDisplay);  
  14.         button = (Button)findViewById(R.id.pickDate);  
  15.         //给button添加事件监听器:  
  16.         button.setOnClickListener(new OnClickListener() {  
  17.               
  18.             @Override  
  19.             public void onClick(View v) {  
  20.                 Intent intent = new Intent();  
  21.                 intent.setClass(DatePickerDemo.this, DatePickerActivity.class);  
  22.                 //DatePickerDemo.this.startActivity(intent);//对比  
  23.                 DatePickerDemo.this.startActivityForResult(intent, 1000);//数字随意  
  24.             }  
  25.         });  
  26.     }  
  27.     //处理返回的结果:  
  28.     @Override  
  29.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  30.         mYear = Integer.parseInt(data.getStringExtra("year"));  
  31.         mMonth = Integer.parseInt(data.getStringExtra("month"));  
  32.         mDay = Integer.parseInt(data.getStringExtra("day"));  
  33.         //设置文本的内容:  
  34.         text.setText(new StringBuilder()  
  35.                     .append(mYear).append("年")  
  36.                     .append(mMonth + 1).append("月")//得到的月份+1,因为从0开始  
  37.                     .append(mDay).append("日"));  
  38.     }  
  39.    
  40. }  
 

 

相应的,DatePickerActivity也要做修改,返回结果:

 

[java:showcolumns] view plaincopy
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. public class DatePickerActivity extends Activity {  
  2.     private Button button = null;  
  3.     private DatePicker datePicker = null;  
  4.     @Override  
  5.     protected void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.datepicker);  
  8.         button = (Button)findViewById(R.id.mybutton);  
  9.         datePicker  = (DatePicker)findViewById(R.id.myDatePicker);  
  10.         button.setOnClickListener(new OnClickListener() {  
  11.               
  12.             @Override  
  13.             public void onClick(View v) {  
  14.                 Intent intent = new Intent();  
  15.                 intent.putExtra("year",datePicker.getYear()+"");  
  16.                 intent.putExtra("month",datePicker.getMonth()+"");  
  17.                 intent.putExtra("day",datePicker.getDayOfMonth()+"");  
  18.                 DatePickerActivity.this.setResult(1000, intent);  
  19.                 finish();//必须手动finish  
  20.             }  
  21.         });  
  22.     }  
  23. }  
 

 

运行效果如下:

  

分享到:
评论

相关推荐

    Android强大的日期时间选择控件

    在Android开发中,日期时间选择控件是用户界面中常见且重要的组成部分,它允许用户方便地选择日期或时间。在Android SDK中,内置了DatePicker和TimePicker两种原生控件,但有时候,开发者可能需要更加强大、定制化的...

    android 时间日期控件

    在Android开发中,时间日期控件是用户界面中常见的组件,用于让用户选择日期或时间。在本示例中,我们关注的是如何在Android应用中添加并使用这些控件。我们将探讨如何通过添加按钮来触发日期和时间的选择,并将选定...

    android 日期区间选择控件

    在Android开发中,日期区间选择控件是一种常用的用户界面组件,尤其在预订系统、日程管理等场景下不可或缺。本文将深入探讨如何实现一个能够选取年月区间的自定义控件,以及涉及到的相关技术点。 首先,我们需要...

    android滚动日期控件

    在Android开发中,为了提供用户友好的界面,我们经常需要使用各种控件来展示和交互数据,其中之一就是滚动日期控件。"android滚动日期控件"通常指的是Android系统中的Wheel View或者NumberPicker组件,它们允许用户...

    android 用户自定义日期控件 可拖动

    在"android 用户自定义日期控件 可拖动"的描述中,提到了该控件不仅可以显示日期,还可以显示时间,甚至同时显示日期和时间,这意味着它具备较高的灵活性。用户在导入这个控件后,只需运行应用,就能立即查看到其...

    Android自定义日期选择控件DatePickerDialog

    在Android开发中,系统提供了许多内置的UI控件,其中包括日期选择器DatePicker。然而,有时候开发者需要根据项目需求对默认的控件进行自定义,使其更符合应用的风格或者提供更丰富的交互体验。本篇文章将深入探讨...

    2021-辅助类库-Android 非常漂亮的滚动选择日期控件.zip

    "2021-辅助类库-Android 非常漂亮的滚动选择日期控件.zip"这个资源包就是一个专门针对这一需求的解决方案。它提供了一个美观且易于使用的滚动选择日期的控件,使得用户可以方便地通过滚动方式选取日期,而不是传统的...

    Android漂亮的日期选择控件

    在Android应用开发中,UI设计和用户体验是至关重要的部分,其中日期选择控件是一个常见的功能需求,例如在日程安排、生日输入等场景。本文将详细介绍一个名为"Android漂亮的日期选择控件"的资源,它提供了美观且易于...

    android 定制日期控件

    "android 定制日期控件"和"android 滚动日期控件"的描述,表明我们将探讨如何在Android应用中创建一个可滚动的选择日期的自定义视图。这个控件可能是一个替代系统默认的DatePicker,提供更个性化的交互方式。 日期...

    Android 日期选择控件

    在Android开发中,日期选择控件是用户界面中常见的组件,用于让用户方便地选取日期。在给定的“Android 日期选择控件”主题中,我们关注的是一个特别设计的控件,它允许用户通过上下滑动的方式进行交互,并且在选定...

    Android 非常漂亮的滚动选择日期控件

    "Android 非常漂亮的滚动选择日期控件"是一个旨在提供美观、易用的日期选择体验的解决方案。这个控件可能采用了自定义视图或者现有的库,如`DatePicker`或第三方库,如`Material-Design-Libraries`等,来实现滚动...

    H5 IOS Android 通用日期控件

    【标题】"H5 IOS Android 通用日期控件"指的是一个可以跨平台使用的HTML5(H5)组件,它能够为iOS和Android设备提供统一的日期选择功能。这个控件通常是一个JavaScript库或者CSS框架,使得开发者在创建Web应用时,...

    Android自定义滚轮式日期(时间)选择控件

    在Android开发中,为了提供用户友好的交互体验,开发者经常需要自定义各种控件,其中滚轮式日期和时间选择控件是一种常见的需求。这种控件通常用于设置事件的日期和时间,比如日历应用、闹钟设定等场景。本文将深入...

    Android 自定义时间日期控件

    在Android开发中,有时我们可能需要为应用提供更加个性化的用户界面,这包括自定义时间日期控件。本文将深入探讨如何在Android中创建自定义的时间日期选择器,以满足特定的设计需求。我们将主要关注以下几个方面: ...

    Android炫酷的星期日期选择控件RollWeekView

    综上所述,创建一个如"RollWeekView"这样的自定义日期选择控件涉及到Android自定义视图、动画、触摸事件处理等多个技术点。通过巧妙地组合这些技术,我们可以构建出一个既实用又美观的UI组件,提升应用的整体体验。...

    Android 非常漂亮的滚动选择日期控件.zip

    【Android 滚动选择日期控件:DateSlider】是一个为安卓应用开发者设计的独特组件,它提供了一种优雅且直观的方式来让用户选择日期。这个控件不仅具备美观的界面,而且交互方式新颖,用户可以通过触屏滚动来选取所需...

    Android 中常见控件参考手册

    ### Android中常见控件参考手册知识点详述 #### TextView 文本框 - **类结构**:`TextView`是`View`的子类,用于显示文本信息。它支持丰富的文本格式和样式,包括字体大小、颜色、对齐方式等。 - **方法**:`...

    Android日期时间选择控件

    2. **组合功能**:将日期和时间选择功能整合到一个控件中,使得用户能一次性完成日期和时间的设定,简化操作流程。 3. **可定制性**:开发者可以根据项目需求,定制控件的颜色、字体、动画效果等,使其更好地融入...

    android 简单的选择日期控件

    本教程将介绍如何在Android中创建一个简单的日期选择控件,适用于初学者快速上手。 首先,我们需要引入Android的日期选择器。在Android SDK中,系统提供了一个叫做`DatePicker`的控件,它允许用户通过日、月、年来...

Global site tag (gtag.js) - Google Analytics