自定义Dialog:双日期选择器
系统自带的DatePickerDialog只能一次性选择一个日期,有时候我们需要这样的功能:需要录入2个日期,比如开始日期和结束日期,如果采用DatePickerDialog需要弹出2次Dialog,能不能一次就搞定呢?那就需要下面的内容了。自定义一个DatePickerDialog,实现OnDateChangedListener接口,里面有2个DatePicker,然后分别对这2个DatePicker设置日期就行了。
http://dl.iteye.com/upload/attachment/0063/2397/6b38226f-f00a-3635-869f-7ab944a01e44.png
package qianlong.qlmobile.view;import qianlong.qlmobile.tablet.yinhe.hk.R;import android.app.Dialog;import android.content.Context;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.DatePicker;import android.widget.DatePicker.OnDateChangedListener;public class DatePickerDialog extends Dialog implements OnDateChangedListener{private Context context;private Button apply,cancel;private DatePicker startDatePicker,endDatePicker;private int start_year;private int start_monthOfYear;private int start_dayOfMonth;private int end_year;private int end_monthOfYear;private int end_dayOfMonth;public DatePickerDialog(Context context,int start_year, int start_monthOfYear, int start_dayOfMonth, int end_year, int end_monthOfYear, int end_dayOfMonth) {super(context);// TODO Auto-generated constructor stubthis.context=context;this.start_year=start_year;this.start_monthOfYear=start_monthOfYear;this.start_dayOfMonth=start_dayOfMonth;this.end_year=end_year;this.end_monthOfYear=end_monthOfYear;this.end_dayOfMonth=end_dayOfMonth;init();}public DatePickerDialog(Context context,int theme,int start_year, int start_monthOfYear, int start_dayOfMonth, int end_year, int end_monthOfYear, int end_dayOfMonth) {super(context);// TODO Auto-generated constructor stubthis.context=context;this.start_year=start_year;this.start_monthOfYear=start_monthOfYear;this.start_dayOfMonth=start_dayOfMonth;this.end_year=end_year;this.end_monthOfYear=end_monthOfYear;this.end_dayOfMonth=end_dayOfMonth;init();}private void init(){//this.setCanceledOnTouchOutside(true);this.setCancelable(true);this.setTitle("日期选择器");}@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.ipo_dialog_date_picker);initViews();initValues();}private void initViews(){apply=(Button)findViewById(R.id.apply);apply.setOnClickListener(clickListener);cancel=(Button)findViewById(R.id.cancel);cancel.setOnClickListener(clickListener);startDatePicker=(DatePicker)findViewById(R.id.startDatePicker);endDatePicker=(DatePicker)findViewById(R.id.endDatePicker);}private void initValues(){startDatePicker.init(start_year, start_monthOfYear, start_dayOfMonth, this);endDatePicker.init(end_year, end_monthOfYear, end_dayOfMonth, this);}private Button.OnClickListener clickListener=new Button.OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.apply:if(onDateSetListener!=null){onDateSetListener.onDateSet(start_year, start_monthOfYear, start_dayOfMonth,end_year, end_monthOfYear, end_dayOfMonth);}dismiss();break;case R.id.cancel:dismiss();break;default:break;}}};private OnDateSetListener onDateSetListener;public interface OnDateSetListener { void onDateSet( int start_year, int start_monthOfYear, int start_dayOfMonth, int end_year, int end_monthOfYear, int end_dayOfMonth ); }public void setOnDateSetListener(OnDateSetListener onDateSetListener){this.onDateSetListener=onDateSetListener;}@Overridepublic void onDateChanged(DatePicker view, int year, int monthOfYear,int dayOfMonth) {// TODO Auto-generated method stubif(view==startDatePicker){this.start_year=year;this.start_monthOfYear=monthOfYear;this.start_dayOfMonth=dayOfMonth;}else if(view==endDatePicker){this.end_year=year;this.end_monthOfYear=monthOfYear;this.end_dayOfMonth=dayOfMonth;}//updateDate(view,year,monthOfYear,dayOfMonth);}//public void updateDate(//DatePicker view, int year, int monthOfYear,int dayOfMonth){//view.updateDate(year, monthOfYear, dayOfMonth);//}}
我只是简单的实现了一下,更多的扩展请大家添上。
ipo_dialog_date_picker.xml如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" ><LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="开始时间:" android:textSize="@dimen/font_middler" android:textColor="@color/white" android:gravity="center" /> <DatePicker android:id="@+id/startDatePicker" android:padding="5dip" android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:layout_marginLeft="5dip" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="结束时间:" android:textSize="@dimen/font_middler" android:textColor="@color/white" android:gravity="center" /> <DatePicker android:id="@+id/endDatePicker" android:padding="5dip" android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout></LinearLayout><LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:layout_marginTop="20dip" > <Button android:id="@+id/apply" android:layout_width="100dip" android:layout_height="wrap_content" android:text="确认" android:textSize="@dimen/font_middler" /> <Button android:id="@+id/cancel" android:layout_width="100dip" android:layout_height="wrap_content" android:text="取消" android:textSize="@dimen/font_middler" android:layout_marginLeft="20dip" /></LinearLayout></LinearLayout>
用法:
private Calendar calendar_start = Calendar.getInstance();private Calendar calendar_end = Calendar.getInstance();//在需要的地方填入如下代码(通常是在Button的click事件中.)qianlong.qlmobile.view.DatePickerDialog d=new qianlong.qlmobile.view.DatePickerDialog(HK_TradeIPOActivity.this.getParent(),calendar_start.get(Calendar.YEAR),calendar_start.get(Calendar.MONTH),calendar_start.get(Calendar.DAY_OF_MONTH),calendar_end.get(Calendar.YEAR),calendar_end.get(Calendar.MONTH),calendar_end.get(Calendar.DAY_OF_MONTH));d.setOnDateSetListener(onDateSetListener);d.show();//自己实现需要的功能private qianlong.qlmobile.view.DatePickerDialog.OnDateSetListener onDateSetListener=new qianlong.qlmobile.view.DatePickerDialog.OnDateSetListener(){@Overridepublic void onDateSet(int start_year, int start_monthOfYear, int start_dayOfMonth, int end_year, int end_monthOfYear, int end_dayOfMonth) {// TODO Auto-generated method stubSimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");calendar_start.set(Calendar.YEAR, start_year);calendar_start.set(Calendar.MONTH, start_monthOfYear);calendar_start.set(Calendar.DAY_OF_MONTH, start_dayOfMonth);calendar_end.set(Calendar.YEAR, end_year); calendar_end.set(Calendar.MONTH, end_monthOfYear); calendar_end.set(Calendar.DAY_OF_MONTH, end_dayOfMonth);String startDate=simpleDateFormat.format(calendar_start.getTime());String endDate=simpleDateFormat.format(calendar_end.getTime()); //doSomething(startDate,endDate) }};
over.
PS:iteye的博客做的越来越烂了,可能以后不在这里混了!
Android开发之日历控件实现
http://www.cnblogs.com/hanyonglu/archive/2012/03/26/2418178.html
页:
[1]