Android中常用到日期和时间空间,今天我就写一下最近学习Android的日期和时间控件的使用。
本人写作一般先上代码,在写分析和步骤。由于代码比较多,在页面上不好看,请在工程文件中查看。
代码如下:
方法一:参考Ruthless-JAVA高级工程师的文章
布局文件:main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<DatePicker android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>
<EditText android:id="@+id/dateEt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cursorVisible="false"
android:editable="false"/>
<TimePicker android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>
<EditText android:id="@+id/timeEt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cursorVisible="false"
android:editable="false"/>
</LinearLayout>
DpTpActivity.java
package com.zjw.activity;
import java.util.Calendar;
import android.app.Activity;
import android.os.Bundle;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TimePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.TimePicker.OnTimeChangedListener;
public class DpTpActivity extends Activity {
private EditText dateEt=null;
private EditText timeEt=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
dateEt=(EditText)findViewById(R.id.dateEt);
timeEt=(EditText)findViewById(R.id.timeEt);
DatePicker datePicker=(DatePicker)findViewById(R.id.datePicker);
TimePicker timePicker=(TimePicker)findViewById(R.id.timePicker);
Calendar calendar=Calendar.getInstance();
int year=calendar.get(Calendar.YEAR);
int monthOfYear=calendar.get(Calendar.MONTH);
int dayOfMonth=calendar.get(Calendar.DAY_OF_MONTH);
datePicker.init(year, monthOfYear, dayOfMonth, new OnDateChangedListener(){
public void onDateChanged(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
dateEt.setText("您选择的日期是:"+year+"年"+(monthOfYear+1)+"月"+dayOfMonth+"日。");
}
});
timePicker.setOnTimeChangedListener(new OnTimeChangedListener(){
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
timeEt.setText("您选择的时间是:"+hourOfDay+"时"+minute+"分。");
}
});
}
}
结果:
分析:
①在布局文件中创建DatePicker和TimePicker视图控件
②通过findViewById获得DatePicker和TimePicker的实例对象,假设上面的实例分别是datePicker和timePicker
③调用DatePickerD的init(DatePicker view,int year,int monthOfYear,int dayOfMonth)方法,由于考虑到和我一样的苦逼人,我就把函数参数写上去,这里面用到的参数意思很明显,需要Calendar类
④设置日期监听器
⑤设置事件监听器
代码:
①布局文件
<DatePicker android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>
②Activity文件
DatePicker datePicker=(DatePicker)findViewById(R.id.datePicker);
TimePicker timePicker=(TimePicker)findViewById(R.id.timePicker);
Calendar calendar=Calendar.getInstance();
int year=calendar.get(Calendar.YEAR);
int monthOfYear=calendar.get(Calendar.MONTH);
int dayOfMonth=calendar.get(Calendar.DAY_OF_MONTH);
datePicker.init(year, monthOfYear, dayOfMonth, new OnDateChangedListener(){
public void onDateChanged(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
dateEt.setText("您选择的日期是:"+year+"年"+(monthOfYear+1)+"月"+dayOfMonth+"日。");
}
});
timePicker.setOnTimeChangedListener(new OnTimeChangedListener(){
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
timeEt.setText("您选择的时间是:"+hourOfDay+"时"+minute+"分。");
}
});
方法二:
main.xml
<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/TextView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/Button01"
android:text="@string/showDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/Button02"
android:text="@string/showTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
"
</LinearLayout>
MianActivity.java
package com.example.datetime;
import java.util.Calendar;
import android.os.Bundle;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.view.Menu;
import android.widget.Button;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TimePicker;
import android.widget.TextView;
import android.view.View.OnClickListener;
public class MainActivity extends Activity {
private Button b1,b2;
private TextView tv1,tv2;
private Calendar c;
private int m_year,m_month,m_day;
private int m_hour,m_minute;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
b1=(Button)findViewById(R.id.Button01);
b1.setText("显示日期");
b2=(Button)findViewById(R.id.Button02);
//获得日历的实例
c = Calendar.getInstance();
m_year = c.get(Calendar.YEAR);
m_month = c.get(Calendar.MONTH);
m_day = c.get(Calendar.DAY_OF_MONTH);
m_hour = c.get(Calendar.HOUR);
m_minute = c.get(Calendar.MINUTE);
tv1 = (TextView)findViewById(R.id.TextView01);
tv2 = (TextView)findViewById(R.id.TextView02);
tv1.setText(m_year+":"+(m_month+1)+":"+m_day);
tv2.setText(m_hour+":"+m_minute);
b1.setOnClickListener(new OnClickListener(){
public void onClick(View v){
showDialog(0);
}
});
b2.setOnClickListener(new OnClickListener(){
public void onClick(View v){
showDialog(1);
}
});
}
protected Dialog onCreateDialog(int id){
if(id==0)
return new DatePickerDialog(this,l1,m_year,m_month,m_day);
else
return new TimePickerDialog(this,l2,m_hour,m_minute,false);
}
private OnDateSetListener l1 = new OnDateSetListener(){
public void onDateSet(DatePicker view,int year,int monthOfYear,int dayOfMonth){
m_year=year;
m_month = monthOfYear;
m_day = dayOfMonth;
tv1.setText(m_year+":"+(m_month+1)+":"+m_day);
}
};
private OnTimeSetListener l2 = new OnTimeSetListener(){
public void onTimeSet(TimePicker view,int hourOfDay,int minute){
m_hour = hourOfDay;
m_minute =minute;
tv2.setText(m_hour+":"+m_minute);
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
运行结果:
分析:
①调用Activity的onCreateDialog()方法创建对话框。
②分别在OnDateSetListener的onDateSet()方法和OnTimeSetListener的onTimeSet()方法中更改日期和时间。
③调用Activity的showDialog()方法显示对话框。
代码:
activity文件代码:
如果这地方看不懂代码,结合分析在原文件中看。
private OnDateSetListener l1 = new OnDateSetListener(){
public void onDateSet(DatePicker view,int year,int monthOfYear,int dayOfMonth){
m_year=year;
m_month = monthOfYear;
m_day = dayOfMonth;
tv1.setText(m_year+":"+(m_month+1)+":"+m_day);
}
};
private OnTimeSetListener l2 = new OnTimeSetListener(){
public void onTimeSet(TimePicker view,int hourOfDay,int minute){
m_hour = hourOfDay;
m_minute =minute;
tv2.setText(m_hour+":"+m_minute);
}
};