自定义齿轮方式的时间选择器

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


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

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.如果是生日,也不必你主动去判断大小,只需要在这里控制一下,用户也不可能选择到其它年份。在实际运用中还涉及了时间的判断,如果录入提醒的东西,肯定是要比当前时间靠后的,比如要输入生日,肯定是要比当前时间靠前的,人不可能生在未来穿梭回来吧。   

话就这么多,接下来给一个源代码的下载地址,有需要的朋友可去荡下来自己研究。
http://download.csdn.net/detail/u013936108/7521069

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值