对android有简单接触的人都知道android有自带的时间选择器DatepickerDialog,本人最近用到这个时发现一个问题,就是在某些手机上这个选择器的月份上有个月字,在我们的测试人员测试时这块出了问题,假如你把月跟数字之间的空格删除,就会导致不能输入,假如你仅仅删除了数字,再输入一个数字时又会出现一个月,就导致俩月字,这样的情况再点确定时系统会默认给你1月份,这样就会失去我们想要的效果。虽然没有报错,但我们还是希望自己选择的5月就是5月。既然系统的不靠谱了,那么我们只能自己去写一个控件来实现了。基于现在齿轮效果的流行,我在网上搜罗了不少资料,最终给大家总结了一个最简单的方式,只需要一个按钮跟一个文本框来实现。截图效果如下:

Android 时间滚轮设置为pm 和am_android

效果明了。接下来看代码:

public class MainActivity extends Activity {
	private TextView text;
	private Calendar calendarSet;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// setContentView(R.layout.activity_main);
		LinearLayout l = new LinearLayout(this);
		Button btn = new Button(this);
		text = new TextView(this);

		l.addView(text);
		l.addView(btn);
		btn.setText("时间测试");
		setContentView(l);
		calendarSet = Calendar.getInstance();
		calendarSet.set(2014, 0, 1, 0, 00, 00);
		btn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				String time = text.getText().toString();
				if (!TextUtils.isEmpty(time)) {
					calendarSet.set(Integer.valueOf(time.substring(0,
							time.indexOf("年"))),
							Integer.valueOf(time.substring(
									time.indexOf("年") + 1, time.indexOf("月")))-1,
							Integer.valueOf(time.substring(
									time.indexOf("月") + 1, time.indexOf("日"))),
							Integer.valueOf(time.substring(
									time.indexOf("日") + 1, time.indexOf("时"))),
							Integer.valueOf(time.substring(
									time.indexOf("时") + 1, time.indexOf("分"))),
							00);
				}
				new MyDateTimePickerDialog(MainActivity.this, 1914, 2014,
						calendarSet, new OnDateTimeSetListener() {

							@Override
							public void onDateTimeSet(int year,
									int monthOfYear, int dayOfMonth, int hour,
									int minute) {
								text.setText(year + "年" + monthOfYear + "月"
										+ dayOfMonth + "日" + hour + "时"
										+ minute + "分");
							}
						}).show();
			}

		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}


布局的东西就不多讲了,就一个显示的文本框跟一个按钮,会一点android的都能写出来,这个是activity的代码,里面传入了一个默认时间,当然你也可以采用当前的系统时间,Calendar 这个东西网上很容易找到。点击按钮的时候我会判断文本框是否有值,如果有就获取这个时间并传进时间选择器,这样出来的时间就是我们上次录入的时间。


1914, 2014 这两个数字代表你让用户选择的年份范围,根据情况而定,比如我们的软件才出道一年多,所以都给两年的选择时间,就传入2013,2014.如果是生日,也不必你主动去判断大小,只需要在这里控制一下,用户也不可能选择到其它年份。在实际运用中还涉及了时间的判断,如果录入提醒的东西,肯定是要比当前时间靠后的,比如要输入生日,肯定是要比当前时间靠前的,人不可能生在未来穿梭回来吧。