DatePickerDialog的使用和套用

日期的选择控件DatePickerDialog

1.系统自带DatePickerDialog的使用:

private Calendar calendar;

private int mYear;

private int mMonth;

private int mDay;

private static final int DATE_DIALOG_ID = 0;

private DatePickerDialog datePickerDialog;

private DatePickerDialog showDateDialog(int id){

switch (id){

caseDATE_DIALOG_ID:

return newDatePickerDialog(getActivity(),onDateSetListener,mYear,mMonth,mDay);

}

return null;

}

DatePickerDialog.OnDateSetListener onDateSetListener = new DatePickerDialog.OnDateSetListener(){

@Override

public voidonDateSet(DatePicker datePicker, int y, int m, int d) {

mYear = y;

mMonth = m;

mDay = d;

updateDisPlay();

}

};

private voidupdateDisPlay(){

dateTextView.setText(String.format("%04d-%02d-%02d", mYear,mMonth + 1, mDay));

}

使用时:

calendar = Calendar.getInstance();

mYear = calendar.get(Calendar.YEAR);

mMonth= calendar.get(Calendar.MONTH);

mDay =calendar.get(Calendar.DAY_OF_MONTH);

datePickerDialog = showDateDialog(DATE_DIALOG_ID);

datePickerDialog.show();

2.套用

public class DatePickerViewextends AlertDialog implements DialogInterface.OnClickListener, DatePicker.OnDateChangedListener{

private static final String YEAR ="year";

private static final String MONTH ="month";

private static final String DAY ="day";

private final DatePicker mDatePicker;

private final OnDateSetListener mCallBack;

private View view;

public DatePickerView(Context context,OnDateSetListener onDateSetListener,

int year, intmonthOfYear, int dayOfMonth) {

this(context, 0, onDateSetListener,year, monthOfYear, dayOfMonth);

}

public DatePickerView(Context context, inttheme,

OnDateSetListeneronDateSetListener, int year, int monthOfYear,

int dayOfMonth) {

super(context, theme);

mCallBack = onDateSetListener;

Context themeContext = getContext();

//將設置alertdialog的settitle和setButton方法注释掉,因为下面要使用setContentView(View view)方法

//代替原有的setView(View view)方法,区别是替换的范围不同。替换后就不需要设置alertdialog的title和button了。

// setButton(BUTTON_POSITIVE,

//themeContext.getText(R.string.date_time_set), this);

// setButton(BUTTON_NEGATIVE,themeContext.getText(R.string.cancel),

// (OnClickListener) null);

// setIcon(0);

//setTitle(R.string.date_picker_dialog_title);

LayoutInflater inflater =(LayoutInflater) themeContext

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

//注意,其实datepickerdialog就是把系统提供的日期选择器DatePicker包装一下而已,所以只需要实现自己需要的布局样式

//然后把DatePicker嵌套进去就可以了。

view =inflater.inflate(R.layout.date_picker_dialog, null);

view.setBackgroundColor(Color.BLUE);

mDatePicker = (DatePicker)view.findViewById(R.id.datePicker);

mDatePicker.init(year, monthOfYear,dayOfMonth, this);

//实现自己的按钮

setButton();

}

public void myShow() {

//自己实现show方法,主要是为了把setContentView方法放到show方法后面,否则会报错。

show();

setContentView(view);

}

private void setButton() {

//获取自己定义的响应按钮并设置监听,直接调用构造时传进来的CallBack接口(为了省劲,没有自己写接口,直接用之前本类定义好的)同时关闭对话框。

view.findViewById(R.id.date_picker_ok).setOnClickListener(

new View.OnClickListener() {

@Override

public void onClick(View v){

if (mCallBack != null){

mDatePicker.clearFocus();

mCallBack.onDateSet(mDatePicker,

mDatePicker.getYear(),

mDatePicker.getMonth(),

mDatePicker.getDayOfMonth());

}

dismiss();

}

});

}

@Override

public void onClick(DialogInterfacedialogInterface, int i) {

}

@Override

public void onDateChanged(DatePickerdatePicker, int year, int month, int day) {

mDatePicker.init(year, month, day,null);

}

public DatePicker getDatePicker() {

return mDatePicker;

}

public void updateDate(int year, intmonthOfYear, int dayOfMonth) {

mDatePicker.updateDate(year,monthOfYear, dayOfMonth);

}

public interface OnDateSetListener {

void onDateSet(DatePicker view, intyear, int monthOfYear,

int dayOfMonth);

}

@Override

public Bundle onSaveInstanceState() {

Bundle state =super.onSaveInstanceState();

state.putInt(YEAR,mDatePicker.getYear());

state.putInt(MONTH,mDatePicker.getMonth());

state.putInt(DAY,mDatePicker.getDayOfMonth());

return state;

}

@Override

public void onRestoreInstanceState(BundlesavedInstanceState) {

super.onRestoreInstanceState(savedInstanceState);

int year = savedInstanceState.getInt(YEAR);

int month =savedInstanceState.getInt(MONTH);

int day =savedInstanceState.getInt(DAY);

mDatePicker.init(year, month, day,this);

}

}

date_picker_dialog.xml

<?xml version="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/white_bg">

<TextView

android:id="@+id/date_picker_title"

android:layout_width="match_parent"

android:layout_height="40dp"

android:text="请选择日期"

android:textColor="@color/text_color"

android:gravity="center"

android:background="@color/yellow"/>

<DatePicker

android:id="@+id/datePicker"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:calendarViewShown="false"

android:spinnersShown="true"

android:background="@color/white_bg"/>

<TextView

android:id="@+id/date_picker_ok"

android:layout_width="match_parent"

android:layout_height="40dp"

android:gravity="center"

android:text="完成"

android:textColor="@color/text_color"

android:background="@color/yellow"/>

</LinearLayout>

使用时:

datePickerView = newDatePickerView(getActivity(),mDateSetListener,mYear,mMonth,mDay);

datePickerView.myShow();

//mDateSetListener类似上面的onDateSetListener

时间: 2024-11-07 08:13:54

DatePickerDialog的使用和套用的相关文章

第6章(5) DatePickerDialog和TimePickerDialog

分类:C#.Android.VS2015: 创建日期:2016-02-08 一.简介 在Android应用中,日期选择对话框和时间选择对话框是分别提供的. 日期选择对话框(DatePickerDialog)用于选择年.月.日: 时间选择对话框(TimePickerDialog)用于选择时.分. 二.示例--Demo04DatePicker 1.运行截图 2.添加Demo04_DatePicker.axml文件 在layout文件夹下添加该文件. <?xml version="1.0&quo

Android DatePickerDialog

可以用DatePickerDialog显示选取日期的对话框.可以设置显示的样式. 1.通过构造方法设置显示样式. 可以通过DatePickerDialog(Context context, int theme, DatePickerDialog.OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth)这个构造方法的第二个参数来设置显示样式. 这个theme参数对应的值,可以使用AlertDialog中的theme

Android DatePickerDialog 使用方法

(一)在Android 4.0以上系统的某些手机(如本人的测试机红米Note(系统4.4.4),以及模拟器(系统4.0)),使用如下代码创建时间选择器时,页面效果如图: Calendar cal = Calendar.getInstance(); DatePickerDialog dialog =new DatePickerDialog(this,new DatePickerDialog.OnDateSetListener(){ @Override publicvoid onDateSet(Da

关于滚轮式的DatePickerDialog在工作中的总结

今天中午趁着别人午休的功夫研究了一下DatepickerDialog的样式,百度一下,一大把都是跟theme和style 的方法来定义Dialog,都是属于自定义的那种,效果不尽人意.个人感觉下面这个效果还是比较符合的,所以就拿出来和大家分享了,可以直接拿去引用即可.(个人吐槽一句,这代码写的真TM看不懂!!!),好了如下所示: <style  name="DatePickerDialog"  parent="@android:Theme.Holo.Light.Dial

android 两次调用DatePickerDialog.onDateSet()

在4.2.2版本上调用系统的DatePickerDialog,发现点击确定时系统调用onDateSet()两次,需要过滤其中的一次. Calendar mCalendar = Calendar.getInstance(); mCalendar.add(Calendar.DAY_OF_YEAR, 1); final DatePickerDialog dateDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListe

Python之路-(js正则表达式、前端页面的模板套用、Django基础)

js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m 表示多行匹配 登录注册验证: test: 判断字符串是否符合规定的规则 rep = /\d+/;   (定义规则) rep.test('')   (引号里面必须包含字母和数字才返回true,否则为false) rep = /^\d+$/; (只有是纯数字时候才返回true,否则是false) exe

实现DatePickerDialog点击确定键不消失

主要是利用了java的反射原理,代码如下: 另外,自4.2版本后DatePickerDialog创建后默认便有一个"设置"跟"取消"按钮.如果想去掉的话可以调用 dialogDate.setButton2("", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }); 方法,文字内容传空即可

DatePickerDialog、AutoCompleteTextView

DatePickerDialog选择日期,调用showDialog(int id)方法,会执行onCreateDialog方法: @Override protected Dialog onCreateDialog(int id) { switch(id){ case DATE_PICKER_ID: return new DatePickerDialog(this,onDateSetListener,2015,8,12); } return super.onCreateDialog(id); }

安卓学习第37课——DatePickerDialog、TimePickerDialog

<?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_hei