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);
}
};