`

自定义Dialog:双日期选择器

阅读更多
系统自带的DatePickerDialog只能一次性选择一个日期,有时候我们需要这样的功能:需要录入2个日期,比如开始日期和结束日期,如果采用DatePickerDialog需要弹出2次Dialog,能不能一次就搞定呢?那就需要下面的内容了。
自定义一个DatePickerDialog,实现OnDateChangedListener接口,里面有2个DatePicker,然后分别对这2个DatePicker设置日期就行了。



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 stub
		this.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 stub
		this.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("日期选择器");
	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.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(){

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			switch (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;
	}
	@Override
	public void onDateChanged(DatePicker view, int year, int monthOfYear,
			int dayOfMonth) {
		// TODO Auto-generated method stub
		if(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(){

		@Override
		public void onDateSet(int start_year,
                int start_monthOfYear,
                int start_dayOfMonth,
                int end_year,
                int end_monthOfYear,
                int end_dayOfMonth) {
			// TODO Auto-generated method stub
		
			SimpleDateFormat 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
  • 大小: 75.4 KB
分享到:
评论
1 楼 duohuoteng 2012-02-23  
那以后到哪啊

相关推荐

    Android自定义漂亮Dialog中嵌入自定义时间选择器和日期选择器

    本文将深入探讨如何在Android自定义Dialog中嵌入自定义的时间选择器和日期选择器,以实现更加美观且用户体验良好的界面。 首先,我们需要理解Android原生的DatePicker和TimePicker组件。DatePicker用于让用户选择...

    实现了Android开发自定义年月日日期选择器,时分时间选择器

    3. 日期选择器:根据所选年份和月份,动态计算该月份的最大日期,如二月可能是28天或29天。然后展示给用户选择。 接下来,我们讨论如何实现自定义的时分时间选择器。这个控件通常包括两个部分:小时选择和分钟选择...

    android自定义日期选择DatePickerDialog

    这意味着,如果使用第三方库来实现自定义的日期选择器,那么在`build.gradle`文件中添加依赖后,可能需要等待库的下载和同步,这在没有网络或者网络慢的情况下会带来不便。因此,将相关代码直接复制到项目中,可以...

    Android 自定义 弹框,日期选择器 弹框,年月日,时分,

    在这个特定的场景中,我们讨论的是一个自定义的日期选择器弹框,它允许用户选取年、月、日以及时间(小时和分钟)。下面我们将深入探讨如何实现这样的功能。 首先,我们需要创建一个自定义 DialogFragment,它是...

    Android自定义日期选择器

    在Android开发中,自定义日期选择器是一种常见的需求,它允许用户以更加直观和友好的方式选择日期。本文将深入探讨如何在Android中创建自定义日期选择器,并提供相关源码解析。 首先,理解Android系统自带的日期...

    自定义日期选择器

    在Android开发中,自定义日期选择器是一种常见的需求,它允许用户通过交互式的界面来选择特定的日期。标准的Android SDK提供了一些内置的日期选择工具,如DatePickerDialog和TimePickerDialog,但有时开发者可能需要...

    时间选择器-dialog实现

    4. 可选地,自定义Dialog的样式和行为。 在实际开发中,这个功能常常被用来让用户选择生日、预约日期等,是Android应用中不可或缺的一部分。希望这个详尽的解释能帮助你理解和实现自己的时间选择器Dialog。

    Android自定义PopupWindow日历 日期时间选择器 可自由搭配年月日时分显示

    本文将深入探讨如何创建一个可自定义的`PopupWindow`日历日期时间选择器,它允许用户根据需求自由选择显示年、月、日、时和分。这个组件在很多场景下都非常实用,比如日期输入、事件安排或者时间设定等。 首先,...

    Android自定义滚轮式日期(时间)选择控件

    最后,将这些独立的滚轮组合成一个完整的日期和时间选择器。可以创建一个新的自定义View类,继承自`LinearLayout`或其他适合的父视图,然后在该类中包含所有的滚轮控件,并处理它们之间的交互逻辑。 6. **测试与...

    日期选择器

    日期选择器在IT行业中是常见的用户界面元素,...在提供的"DataDemo"文件中,可能包含了关于如何创建和自定义一个日期选择器的示例代码或资源,通过学习和实践这些示例,你可以更好地理解和掌握日期选择器的实现细节。

    android日期时间选择器

    首先,Android原生系统提供了两种基本的日期时间选择器:DatePicker和TimePicker。DatePicker用于选择日期,而TimePicker则用于选择时间。这两个控件都是Android SDK的一部分,可以在XML布局文件中直接添加,或者在...

    自定义日期选择器(DatePickerDialog)

    在Android开发中,`DatePickerDialog`是一个常用的组件,用于让用户选择日期。自定义`DatePickerDialog`可以帮助开发者...通过以上步骤,你可以创建出一个仿小米效果的自定义日期选择器,让日期选择变得既美观又实用。

    dialog窗口大集合

    本文将深入探讨Android Dialog的基本概念、类型、使用方法以及如何自定义Dialog。 首先,Dialog在Android中是基于Activity构建的,它以轻量级的形式浮现在当前应用界面之上,通常用于展示警告、确认、选项选择等...

    时间日期选择器

    首先,Android提供了两种内置的时间日期选择器:DatePicker和TimePicker。DatePicker用于选择日期,而TimePicker则用于选择时间。这两个组件都是DialogFragment的子类,可以通过弹出对话框的方式让用户进行交互。 1...

    自定义日期选择控件DatePickerDialog.zip

    `time_layout.xml`文件是Dialog的布局文件,用于定义Dialog的视觉结构,包括日期选择器的样式、按钮位置、字体大小和颜色等。如果开发者想要修改Dialog的显示效果,比如更改日期选择器的背景、按钮文字或者调整布局...

    Android:DatePacker日期选择教学

    接下来是DatePicker,它是Android提供的一个标准日期选择器。通过DatePicker,用户可以选择年、月和日。我们可以为DatePicker设置初始日期,并监听日期改变事件,以便在用户选择新日期时更新应用的状态。DatePicker...

    滚轮效果View的日期选择器和时间选择器和对话框(eclipse和Android studio两个版本)

    总结,这个项目为开发者提供了在Android应用中实现滚轮效果日期选择器和时间选择器的示例,涵盖了Eclipse和Android Studio两种开发环境,同时可能涉及到自定义滚轮视图的实现,对于理解和实践Android UI设计有着重要...

    高大上的安卓日期选择器

    一、Android日期选择器(DatePicker) DatePicker是Android SDK提供的一种内置控件,用于让用户选择日期。它通常由三个滚动条组成,分别代表年、月和日。通过自定义样式,开发者可以调整其外观,使其符合应用的整体...

    Android自定义的时间选择器

    在Android应用开发中,时间选择器是一个至关重要的组件,它允许用户方便地选取特定的日期或时间。在原生的Android SDK中,虽然提供了DatePicker和TimePicker控件,但有时为了满足个性化需求或者追求更好的用户体验,...

Global site tag (gtag.js) - Google Analytics