zoukankan      html  css  js  c++  java
  • 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的输入,但这真的不仅无聊并且还费时
  • 相关阅读:
    windows server 2012 如何开启 hyper-v 并创建虚拟机
    ABP框架系列之二十四:(Email-Sending-EF-电子邮件发送)
    ABP框架系列之二十三:(EF-MySql-Integration-EF-MySql-集成)
    ABP框架系列之二十二:(Dynamic-Web-API-动态WebApi)
    ABP框架系列之二十一:(Domain-Services-领域服务)
    ABP框架系列之二十:(Dependency-Injection-依赖注入)
    ABP框架系列之十九:(Debugging-调试)
    ABP框架系列之十八:(Data-Transfer-Objects-数据转换对象)
    ABP框架系列之十七:(Data-Filters-数据过滤)
    ABP框架系列之十六:(Dapper-Integration-Dapper集成)
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7072430.html
Copyright © 2011-2022 走看看