Android學習筆記13:EditText的使用

來源:互聯網
上載者:User

 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>
 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.