首页 > 代码库 > 赵雅智_textview自定义日期

赵雅智_textview自定义日期

实现效果:


自定义日期实现步骤:

  1. 设置textview点击事件,弹出自定义的对话框
  2. 重写创建对话框
  3. 准备日期监听器,给对话框赋值
日期比较步骤:
  1. 获取textview值并判断是否为空
  2. 设置显示的日期格式
  3. 使用Date.before()函数判断你所选的时间是否是今天之前,或者时间1是否在时间2之前

layout布局:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android_date"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.android_date.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

MainActivity

package com.example.android_date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.Toast;

/**
 * 自定义日期组件
 * 
 * @author yazhizhao 20142014-10-23上午11:45:04
 */
public class MainActivity extends Activity {
	private int mMonth;
	private int mDay;
	private int mYear;
	private TextView tvDate1;
	private TextView tvDate2;
	private String tvDate1Str;
	private String tvDate2Str;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		tvDate1 = (TextView) findViewById(R.id.tv_date1);
		tvDate2 = (TextView) findViewById(R.id.tv_date2);

		// 为日期控件赋值
		final Calendar c = Calendar.getInstance();
		mYear = c.get(Calendar.YEAR);
		mMonth = c.get(Calendar.MONTH);
		mDay = c.get(Calendar.DAY_OF_MONTH);
		tvDate1.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				// TODO Auto-generated method stub
				showDialog(1);
			}
		});
		tvDate2.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				showDialog(2);
			}
		});
	}

	// 重写创建对话框方法
	protected Dialog onCreateDialog(int id) {
		switch (id) {
		case 1:
			// 把Activity上下文、日期设置监听器、以及日期的年月日都作为参数传给那个新成立的对话框组件
			return new DatePickerDialog(this, dsl, mYear, mMonth, mDay);
		case 2:
			// 把Activity上下文、日期设置监听器、以及日期的年月日都作为参数传给那个新成立的对话框组件
			return new DatePickerDialog(this, ds2, mYear, mMonth, mDay);
		}
		return null;
	}

	// 准备日期设置监听器
	private OnDateSetListener dsl = new DatePickerDialog.OnDateSetListener() {
		public void onDateSet(DatePicker view, int year, int monthOfYear,
				int dayOfMonth) {
			mYear = year;
			mMonth = monthOfYear;
			mDay = dayOfMonth;
			tvDate1.setText(mYear + "-" + (mMonth + 1) + "-" + mDay);

		}
	};
	// 准备日期设置监听器
	private OnDateSetListener ds2 = new DatePickerDialog.OnDateSetListener() {
		public void onDateSet(DatePicker view, int year, int monthOfYear,
				int dayOfMonth) {
			mYear = year;
			mMonth = monthOfYear;
			mDay = dayOfMonth;
			tvDate2.setText(mYear + "-" + (mMonth + 1) + "-" + mDay);

		}

	};

	/**
	 * 对比日期的点击事件
	 * 
	 * @author yazhizhao 20142014-10-23上午11:55:11
	 * @param v
	 */
	public void click(View v) {
		Date time1 = null;
		Date time2 = null;
		
		// 判断时间1和时间2是否为空
		tvDate1Str = tvDate1.getText().toString().trim();
		tvDate2Str = tvDate2.getText().toString().trim();
		if (tvDate1Str == null || "".equals(tvDate1Str)) {
			Toast.makeText(getApplicationContext(), "时间1不为空",
					Toast.LENGTH_SHORT).show();
			return;
		} else if (tvDate2Str == null || "".equals(tvDate2Str)) {
			Toast.makeText(getApplicationContext(), "时间2不为空",
					Toast.LENGTH_SHORT).show();
			return;

		}

		// 日期使用"yyyy-MM-dd"格式
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
		try {
			time1 = sdf.parse(tvDate1Str);
			time2 = sdf.parse(tvDate2Str);
		} catch (ParseException e) {

			e.printStackTrace();
		}

		// 判断时间1,2前后
		Date nowdate = new Date();
		if (time1.before(nowdate)) {
			Toast.makeText(getApplicationContext(), "请选择正确的时间1",
					Toast.LENGTH_SHORT).show();
			return;
		} else if (time2.before(time1)) {
			Toast.makeText(getApplicationContext(), "请选择正确的时间2",
					Toast.LENGTH_SHORT).show();
			return;

		} else {
			Toast.makeText(getApplicationContext(), "ok", Toast.LENGTH_SHORT)
					.show();
		}

	}
}

运行效果:


赵雅智_textview自定义日期