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"設定文本的類型,用於協助IME顯示合適的鍵盤類型。可設定的參數如下:none、text、textCapCharacters字母大寫、textCapWords單字首大寫、textCapSentences僅第一個字母大小、textAutoCorrect、textAutoComplete自動完成、textMultiLine多行輸入、textImeMultiLineIME多行、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類主要用於實現讓圖片替換指定的文字。
具體實現方法如下:
SpannableString
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的詳細用法請見:
[
4.EditText中輸入內容校正
在平常的應用中,當使用者在EditText中輸入了明顯的錯誤內容,而選擇了“提交”時,為滿足良好的使用者體驗,應當彈出類似“請輸入正確的內容”的友好提示資訊。
如何?這一功能呢?Android為我們提供了mEditText.setError()方法來實現這一功能。首先需要使用mEditText.getText()方法擷取EditText中的內容,然後對其內容進行判斷,最後將判斷結果用mEditText.setError()方法顯示出來。
具體實現方法如下:
EditText.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 執行個體
執行個體源碼如下:
MainActivity.java
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檔案如下:
activity_main.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>