EditText是在Android開發中經常被使用到的控件,主要用來獲取用戶的輸入內容。
1.EditText常用屬性
EditText繼承自TextView,所以EditText也擁有一些TextView中的屬性和方法。EditText的常用屬性有以下一些:
android:capitalize="sentences"//設置英文字母大寫類型,sentences僅第一個字母大寫;words每一個單詞首字母大小,用空格區分單詞;characters每一個英文字母都大寫
android:cursorVisible="true"//設定光標為顯示或隱藏,默認為顯示
android:digits="0123456789.abc#"//設置允許輸入哪些字符
android:drawableTop//在Text的正上方輸出一個drawable
android:drawableBottom//在Text的下方輸出一個drawable
android::drawableLeft//在Text的左方輸出一個drawable
android::drawableRight//在Text的右方輸出一個drawable
android::editable="true" //設置是否可編輯
android::ellipsize="start"//設置當文字過長時,該控件的顯示方式。start省略號顯示在開頭;end省略號顯示在結尾;middle省略號顯示在中間;marquee跑馬燈方式顯示
android:hint="請輸入內容!"//設置顯示在EditText中的默認提示信息
android:inputType="none"設置文本的類型,用於幫助輸入法顯示合適的鍵盤類型。可設置的參數如下:none、text、textCapCharacters字母大寫、textCapWords單詞首字母大寫、textCapSentences僅第一個字母大小、textAutoCorrect、textAutoComplete自動完成、textMultiLine多行輸入、textImeMultiLine輸入法多行、textNoSuggestions不提示、textEmailAddress電子郵件地址、textEmailSubject郵件主題、textShortMessage短信息、textLongMessage長訊息、textPersonName人名、textPostalAddress地址、textPassword密碼、textVisiblePassword可見密碼、textWebEditText作為網頁表單的文本、textFilte文本篩選過濾、textPhonetic拼音輸入、numberSigned符號數字格式、numberDecimal可帶小數點的浮點格式、phone電話號碼、datetime時間日期、date日期、time時間
android:numeric="integer"//設置輸入的數字類型,integer整數,decimal小數,signed帶符號整數
android:textColor = "#ff8c00"//設置字體顏色
android:textStyle="bold"//設置字體類型,黑體為bold, 斜體為italic, bolditalic
android:textSize="20dip"//設置字體大小
android:textScaleX="1.5"//設置字間距
android:singleLine="true"//設置單行輸入模式,文字不能自動換行
2.Enter鍵圖標的設置
在Android中,軟鍵盤的Enter鍵圖標默認顯示的是“完成”文本,如圖1所示。
圖1 默認軟鍵盤
想象一下,當我們在EditText中完成了輸入,想要以輸入的內容作為關鍵字進行搜索時,卻需要按下“完成”圖標的Enter按鍵,顯然這不符合良好的用戶體驗設計。
那么,怎么樣來改變Enter按鍵的圖標呢?Android為我們提供了android:imeOptions來實現這一功能。
android:imeOptions的常用參數有以下一些:normal(常規),actionUnspecified(未指定),actionNone(沒有動作),actionGo(去往),actionSearch(搜索),actionSend(發送),actionNext(下一個),actionDone(完成),flagNoExtractUi,flagNoAccessoryAction,flagNoEnterAction等,其對應的Enter鍵圖標如圖2所示。
圖2 Enter鍵圖標式樣
3.在EditText中輸入QQ表情圖片
在EditText中輸入QQ表情圖片,需要使用到SpannableString類和ImageSpan類。
SpannableString類繼承自android.text.Spanned,作用是對不可變的文本內容進行附加和分離操作。SpannableString類的常用方法有以下一些:
mSpannableString.CharAt(int i);//返回指定索引i處的字節
mSpannableString.getChars(int start, int end, char[] dest, int off);//獲取從start到end的字符串
mSpannableString.getSpans(int queryStart, int queryEnd, Class kind);
mSpannableString.length();//返回字節數
mSpannableString.setSpan(Object what, int start, int end, int flags);//
mSpannableString.toString();//返回字符串
ImageSpan類主要用於實現讓圖片替換指定的文字。
具體實現方法如下:

1 Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), resourceId); 2 ImageSpan mImageSpan = new ImageSpan(MainActivity.this, mBitmap); 3 SpannableString mSpannableString = new SpannableString("qq"); 4 mSpannableString.setSpan(mImageSpan, 0, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 5 mEditText.append(mSpannableString);
SpannableString的詳細用法請見:
[Android教程]TextView使用SpannableString設置復合文本 http://orgcent.com/android-textview-spannablestring-span/
4.EditText中輸入內容校驗
在平常的應用中,當用戶在EditText中輸入了明顯的錯誤內容,而選擇了“提交”時,為滿足良好的用戶體驗,應當彈出類似“請輸入正確的內容”的友好提示信息。
如何實現這一功能呢?Android為我們提供了mEditText.setError()方法來實現這一功能。首先需要使用mEditText.getText()方法獲取EditText中的內容,然后對其內容進行判斷,最后將判斷結果用mEditText.setError()方法顯示出來。
具體實現方法如下:

1 String mString = mEditText2.getText().toString(); 2 if(mString == null || mString.trim().equals("")) { 3 mEditText2.setError("請輸入內容!"); 4 return; 5 }
5.EditText使用實例
在本實例中,實現了在EditText中輸入QQ表情圖片和EditText中輸入內容校驗的功能。在實例1中,每次按下“輸入QQ表情”按鈕,就可以在EditText中輸入一個隨機的QQ表情圖片。在實例2中,如果EditText中沒有輸入任何內容,按下“提交”按鈕,將會彈出“請輸入內容!”的提示信息。實例的效果如圖3所示。
圖3 實例效果圖
實例源碼如下:

1 package com.example.android_edittext; 2 3 import java.lang.reflect.Field; 4 import java.util.Random; 5 import android.os.Bundle; 6 import android.app.Activity; 7 import android.graphics.Bitmap; 8 import android.graphics.BitmapFactory; 9 import android.text.Spannable; 10 import android.text.SpannableString; 11 import android.text.style.ImageSpan; 12 import android.view.View; 13 import android.widget.Button; 14 import android.widget.EditText; 15 16 public class MainActivity extends Activity { 17 18 private EditText mEditText_qq = null; //QQ表情輸入顯示框 19 private Button mButton_qq = null; //QQ表情輸入按鈕 20 private EditText mEditText_check = null; //內容校驗框 21 private Button mButton_check = null; //提交按鈕 22 23 @Override 24 public void onCreate(Bundle savedInstanceState) { 25 super.onCreate(savedInstanceState); 26 setContentView(R.layout.activity_main); 27 28 mEditText_qq = (EditText)this.findViewById(R.id.editText_qq); 29 mButton_qq = (Button)this.findViewById(R.id.button_qq); 30 mEditText_check = (EditText)this.findViewById(R.id.editText_check); 31 mButton_check = (Button)this.findViewById(R.id.button_check); 32 33 //QQ表情輸入按鈕監聽 34 mButton_qq.setOnClickListener(new View.OnClickListener() { 35 public void onClick(View v) { 36 int randomId = 1 + new Random().nextInt(6); //隨機數1-6 37 try { 38 Field field = R.drawable.class.getDeclaredField("qq"+randomId); 39 int resourceId = Integer.parseInt(field.get(null).toString()); //獲取圖片資源Id 40 Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), resourceId); 41 ImageSpan mImageSpan = new ImageSpan(MainActivity.this, mBitmap); 42 SpannableString mSpannableString = new SpannableString("qq"); 43 mSpannableString.setSpan(mImageSpan, 0, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 44 mEditText_qq.append(mSpannableString); 45 } catch (Exception e) { 46 47 } 48 } 49 }); 50 51 //提交按鈕監聽 52 mButton_check.setOnClickListener(new View.OnClickListener() { 53 public void onClick(View v) { 54 String mString = mEditText_check.getText().toString(); 55 if(mString == null || mString.trim().equals("")) { //判斷EditText中內容為空 56 mEditText_check.setError("請輸入內容!"); 57 return; 58 } 59 } 60 }); 61 } 62 63 }
相應xml文件如下:

1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:orientation="vertical" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" > 6 7 <!-- EditText中輸入QQ表情圖片 --> 8 <TextView 9 android:layout_marginTop="5dp" 10 android:layout_width="match_parent" 11 android:layout_height="wrap_content" 12 android:text="@string/string_textview1" > 13 </TextView> 14 15 <EditText 16 android:id="@+id/editText_qq" 17 android:hint="@string/string_editText" 18 android:layout_width="match_parent" 19 android:layout_height="wrap_content" 20 android:layout_marginTop="5dp" > 21 </EditText> 22 23 <Button 24 android:id="@+id/button_qq" 25 android:layout_width="match_parent" 26 android:layout_height="wrap_content" 27 android:text="@string/string_button1" > 28 </Button> 29 30 <!-- EditText中輸入內容校驗 --> 31 <TextView 32 android:layout_marginTop="20dp" 33 android:layout_width="match_parent" 34 android:layout_height="wrap_content" 35 android:text="@string/string_textview2" > 36 </TextView> 37 38 <EditText 39 android:id="@+id/editText_check" 40 android:layout_width="match_parent" 41 android:layout_height="wrap_content" 42 android:digits="0123456789" 43 android:inputType="number|textCapCharacters" > 44 </EditText> 45 46 <Button 47 android:id="@+id/button_check" 48 android:layout_width="match_parent" 49 android:layout_height="wrap_content" 50 android:text="@string/string_button2" > 51 </Button> 52 53 </LinearLayout>
PS:本博文部分內容根據《老羅Android開發視頻教程》Android常用UI控件編程第五集、第六集學習總結而得,向羅老師致敬!
相關資料:
在EditText中插入表情圖片(Character&SpannableString) http://gundumw100.iteye.com/blog/904107
[Android教程]EditText大小(長寬)的多種設置方式 http://orgcent.com/android-edittext-ems-layout-minwidth-maxheight/