我们都知道,在表单中对数据进行验证不但无聊并且easy出错。
(原文地址:http://blog.csdn.net/vector_yi/article/details/24424713)

想象一下,一个表单内有若干个须要日期类型的输入,而你又不想对这些输入信息进行日期类型的验证,你会怎么做?
这里有一种解决的方法是,让用户觉得他们是在一个EditText中操作,但实际上是一个Button,点击这个Button时会弹出一个DatePicker。
为了让这个方法可行,我们须要改变这个Button的背景,让用户以为这是一个EditText。
事实上非常easy:
<Button android:id="@+id/details_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:background="@android:drawable/edit_text" /><!--将Button的背景改为EditText的背景-->

接下来仅仅要在Activity中加入Button的点击事件。让它弹出一个DatePicker并将选中的日期设为Button的Text就可以。

package com.manning.androidhacks.hack009;import java.util.Calendar;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.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;public class MainActivity extends Activity {private static final int DATE_DIALOG_ID = 0;private int mYear;private int mMonth;private int mDay;private OnDateSetListener mDateSetListener;private Button mDateButton;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);// get the current datefinal Calendar c = Calendar.getInstance();mYear = c.get(Calendar.YEAR);mMonth = c.get(Calendar.MONTH);mDay = c.get(Calendar.DAY_OF_MONTH);mDateSetListener = new DatePickerDialog.OnDateSetListener() {@Overridepublic void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {mDateButton.setText(getString(R.string.picked_date_format,monthOfYear + 1, dayOfMonth, year));}};mDateButton = (Button) findViewById(R.id.details_date);mDateButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {showDialog(DATE_DIALOG_ID);}});}@Overrideprotected Dialog onCreateDialog(int id) {switch (id) {case DATE_DIALOG_ID:return new DatePickerDialog(this, mDateSetListener, mYear,mMonth - 1, mDay);}return super.onCreateDialog(id);}}

可能你会觉得EditText和Button都继承自TextView。为何不直接创建一个EditText并加入OnClickListener?
可是Button不同意用户直接编辑显示的文字,显然让验证更加安全。
你可能还在坚持,能够把EditText的Editable属性设为false。
可是既然Button存在的意义就是能够点击而且不能改动显示的文字。为何你要强加给EditText一些原本不适合它的属性让它变成一个Button?
你也能够利用TextWatcher来验证EditText的输入,但这真的不仅无聊并且还费时。

转载于:https://www.cnblogs.com/yutingliuyl/p/7072430.html

50个Android开发技巧(09 避免用EditText对日期进行验证)相关推荐

  1. Android开发技巧——大图裁剪

    本篇内容是接上篇<Android开发技巧--定制仿微信图片裁剪控件> 的,先简单介绍对上篇所封装的裁剪控件的使用,再详细说明如何使用它进行大图裁剪,包括对旋转图片的裁剪. 裁剪控件的简单使 ...

  2. Android开发技巧——自定义控件之自定义属性

    Android开发技巧--自定义控件之自定义属性 掌握自定义控件是很重要的,因为通过自定义控件,能够:解决UI问题,优化布局性能,简化布局代码. 上一篇讲了如何通过xml把几个控件组织起来,并继承某个 ...

  3. Android开发技巧——自定义控件之组合控件

    Android开发技巧--自定义控件之组合控件 我准备在接下来一段时间,写一系列有关Android自定义控件的博客,包括如何进行各种自定义,并分享一下我所知道的其中的技巧,注意点等. 还是那句老话,尽 ...

  4. 一些很不错的Android开发技巧

    一些很不错的Android开发技巧,这个项目翻译自 android-tips-tricks 去掉了一些我认为不重要的,对我使用过的东东做了评价,同时翻译了一些自己没有注意到的知识点的文章. ❤️ st ...

  5. android开发技巧杂谈

    android开发技巧一 android的一些常用包是发布在国外的,所以一些包,我们下载不下来,我们可以使用阿里云的镜像地址(maven { url 'https://maven.aliyun.com ...

  6. 社区说|常用 Android 开发技巧

    活动时间 4月7日(本周四) 20:00-21:00 活动日程 20:00-20:45 主题分享 常用 Android 开发技巧 李老师的开发技巧私房菜,一定有你没吃过的菜! 重构技巧 常用插件 阅读 ...

  7. 移动周刊第 182 期:谈 Android 开发技巧、 iOS 系统框架实践

    写在前面 移动周刊第 182 期如约而至.如果你有好的文章以及优化建议,请发送邮件至mobilehub@csdn.net,在技术探索的道路上我们共同进步. YouTube 推出 VR 视频和 360 ...

  8. Android开发技巧!Android开发大佬的百度,美团,快手等大厂Offer收割之旅,附超全教程文档

    想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样. 本文参考了目前大部分 Android 应用启动优化的方案,将大家的方案做一个汇总,如果你有这方 ...

  9. Android开发技巧:我的菜单我做主

    本文截选自<Android开发权威指南> Android SDK本身提供了一种默认创建菜单的机制.但通过这种机制创建的菜单虽然从功能上很完备,但在界面效果上实在是有点"土&quo ...

最新文章

  1. 面向对象和面向过程,python中的类class,python中程序的入口——main方法,
  2. 东北农业大学网络教育计算机考试,THEOL网络教学综合平台-东北农业大学继续教育学院...
  3. linux打开ftp功能的方法
  4. JMS中的消息通信模型
  5. eval() python_python基础-input函数和eval函数
  6. python中英文混输对不齐_python如何处理中英文混排最长公共前缀问题
  7. sqlmap指定cookie_Sqlmap Cookie注入 教程
  8. 太卷了,这篇 CPU Cache,估计没人看
  9. 基于自抗扰控制的压力环控制算法研究
  10. CANoe CAPL文件操作目录合集
  11. 微软 Windows 10 Version 2004 新功能盘点:分离Cortana,数项体验升级,抢先体验
  12. android edittext过滤表情,EditText过滤emoji表情
  13. 把数字翻译成字符串——python
  14. Java-学校项目3---类与对象
  15. Java实现微信公众号客服功能和本地联调
  16. 全国计算机access二级真题,最新全国计算机二级access历年真题.doc
  17. AF BAF tuning <5>
  18. STM32F103ZET(基于秉火开发板)+Cubemx(F1 V1.60库)+RTC(修复官方例程日期不更新bug)
  19. 粗读SynFace: Face Recognition with Synthetic Data
  20. 云原生应用的12要素

热门文章

  1. 语音识别(一):speech-recognition的实验案例
  2. c++禁止进程被结束_多进程任务实现
  3. 为什么手机上传图片这么慢 前端_为什么手机拿去维修,店家总说第二天来取?修手机真这么慢?...
  4. java 判断int是几位_快速判断一个int值是几位数
  5. 项目既有vue又有html,01-vue指令
  6. 伽卡他卡电子教室 百度百科_怎么创建人物百度百科?人物百度百科创作技巧...
  7. Mysql事务处理问题
  8. 第五讲、文本编辑器(vim/vi)
  9. 【c++】29.设计模式总结
  10. Machine Learning - Andrew Ng on Coursera (Week 6)