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

我们都知道,在表单中对数据进行验证不但无聊并且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;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		// get the current date
		final 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() {
			@Override
			public 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() {
			@Override
			public void onClick(View v) {
				showDialog(DATE_DIALOG_ID);
			}
		});
	}

	@Override
	protected 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的输入,但这真的不仅无聊并且还费时。

时间: 2024-08-08 15:20:54

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

50个Android开发技巧(10 为TextView加入样式)

首先来看一个控件的例子: (原文地址:http://blog.csdn.net/vector_yi/article/details/24428085) 手机上类似这种场景你一定已经见过非常多次了,但有没有考虑过它是如何实现的? 或许你会觉得这是一个略微复杂的自己定义的View,但,没错,这实际上仅仅是一个原生的TextView而已. TextView是一个简单而奇妙的Widget,你能够利用它以不同风格不同格式来展现文字. 举两个简单的样例: 1.在TextView中加入一个超链接 事实上非常e

50个Android开发技巧(24 处理ListView数据为空的情况)

在移动平台上为用户展示数据的一个经常用法是将数据填充进一个List内,而此时须要注意的一点就是: 原文地址:(http://blog.csdn.net/vector_yi/article/details/24936163) 怎样处理须要填充的数据为空的情况? ListView及其它继承自AdapterView的类都有一个简便的处理这样的情况的方法:setEmptyView(View). 当ListView的Adapter为空或者Adapter的isEmpty()方法返回true的时候,它将会把设

50个Android开发技巧(20 使用MVP模式)

??在提供了2个链接,其中一个是原文的链接?? http://yeungeek.com/2014/06/17/mvp-android/ http://blog.csdn.net/vector_yi/article/details/24719873 一.MVP介绍 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互,同时让Model只关系数据的处理,基于MVC概念的MVP(Mode

Android开发技巧二--避免在EditText中验证日期

开发者都知道验证表单里的数据是令人厌烦而且容易出错的,日期输入框的验证也是如此.我们可以开发出一个外观看起来与EditText相同Button,点击该Button后,会显示一个DatePicker控件. 要实现上面的想法,需要将Button控件的默认背景改成EditText的背景. 看一下main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q

50一个Android开发技巧(01 利用好layout_weight属性)

问题:如何将一个Button放置在布局的中间,并设置其宽度parent的50%? 分析:问题想要达到的效果应该是这样: (原文地址:http://blog.csdn.net/vector_yi/article/details/24397733) 这看起来不难,但非常多开发人员并不知道达到这样效果的最佳方法. 解决:在此我们将weightSum属性与layout_weight属性一起利用. <LinearLayout xmlns:android = "http://schemas.andro

50个Android开发技巧(11 为文字加入特效)

问题:怎样构建一个模拟LED数字时钟的页面?效果例如以下图所看到的: (原文地址:http://blog.csdn.net/vector_yi/article/details/24460227) 分析:我们能够利用两个TextView来显示,第一个TextView显示LED屏上默认不发光的88:88:88.还有一个显示实时的时间并加入发光及阴影效果. 可是我们还须要解决显示的字体问题,让它看起来更像是一个真实的LED数字时钟. 解决步骤:(1)自己定义一个LedTextView类,继承自Text

50个Android开发技巧(12 为控件加入圆角边框)

控件的圆角边框能够使你的App看起来更美观,事实上实现起来也非常easy. (原文地址:http://blog.csdn.net/vector_yi/article/details/24463025) 以创建一个灰色的带圆角边框的Button为例: 一.创建一个ShapeDrawable作为背景 在drawable文件夹下创建一个button_rounded_background.xml文件: <shape xmlns:android = "http://schemas.android.c

50个Android开发技巧(03 自己定义ViewGroup)

问题:怎样创建一个例如以下图所看到的的布局? 图1 (原文地址:http://blog.csdn.net/vector_yi/article/details/24415537) 你可能会说,利用RelativeLayout和margins就能够实现.的确,例如以下XML代码能够简单地构建一个类似的布局: <RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:layo

50个Android开发人员必备UI效果源码[转载]

50个Android开发人员必备UI效果源码[转载] http://blog.csdn.net/qq1059458376/article/details/8145497 Android 仿微信之主页面实现篇Android 仿微信之界面导航篇Android 高仿QQ 好友分组列表Android 高仿QQ 界面滑动效果Android 高仿QQ 登陆界面Android 对Path的旋转效果的拓展Android高仿360安全卫士布局源码Android SlidingDrawer 滑动抽屉效果Androi