在Android开发中,日前选择对话框是比较常用的控件。
Android系统提供了日前选择对话框控件,不需要我们自己实现。
在Android中使用日期选择对话框控件需要以下几步:
1.创建DatePickerDialog.OnDateSetListener,当用户选择好日期后,单击Set按钮时触发。
2.创建DatePickerDialog对象。
3.调用showDialog(id)方法,显示日期选择对话框。
下面代码实现的功能是:如果输入框中没有日期,则弹出的对话框中显示当前的日期;如果有日期,则显示输入框中的日期。
完整代码:
布局文件datepicker.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/datepicker_et"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
Activity:
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.Dialog;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.DatePicker;
import android.widget.EditText;
import com.and.test.R;
public class DatePickerDialogActivity extends Activity {
private EditText et = null;
public final static int SHOW_DATEPICKER = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.datepicker);
et = (EditText) findViewById(R.id.datepicker_et);
et.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// 调用Activity的showDialog(id)方法显示日期选择对话框。
showDialog(SHOW_DATEPICKER);
return false;
}
});
}
// 复写Activity的onCreateDialog()方法,创建一个日期选择对话框
// 点击输入框时,弹出日期选择对话框。
// 如果输入框中有日期,则显示输入的日期;否则,显示当前日期。
@Override
protected Dialog onCreateDialog(int id) {
switch(id) {
case SHOW_DATEPICKER:
int year,month,day;
if (et.getText().toString() != null && et.getText().toString().matches("^\\d{4}-\\d{2}-\\d{2}$")) {
year = Integer.valueOf(et.getText().toString().substring(0,3));
month = Integer.valueOf(et.getText().toString().substring(5,6));
day = Integer.valueOf(et.getText().toString().substring(8,9));
}
else {
Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
}
DatePickerDialog dp = new DatePickerDialog(this, dateChangeListener, year, month, day);
return dp;
}
return null;
}
// 事件监听。当用户选择好日期后,单击Set按钮时触发。
// 这里用户选择好日期后,单击Set按钮,将用户选择的日期显示到输入框。
DatePickerDialog.OnDateSetListener dateChangeListener = new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
et.setText(year + "-" + (monthOfYear + 1) + "-" + dayOfMonth);
}
};
}
显示的效果:
输入框中没有日期时,显示当前的日期
当输入框中有日期时,显示输入框中的日期。