50個Android開發技巧(09 避免用EditText對日期進行驗證)

來源:互聯網
上載者:User

標籤:androi   util   log   避免   target   out   get   main   tab   

我們都知道,在表單中對資料進行驗證不但無聊並且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的輸入,但這真的不僅無聊並且還費時。

50個Android開發技巧(09 避免用EditText對日期進行驗證)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.