Android學習筆記13:EditText的使用


  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"設置文本的類型,用於幫助輸入法顯示合適的鍵盤類型。可設置的參數如下:nonetexttextCapCharacters字母大寫、textCapWords單詞首字母大寫、textCapSentences僅第一個字母大小、textAutoCorrecttextAutoComplete自動完成、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(完成),flagNoExtractUiflagNoAccessoryActionflagNoEnterAction等,其對應的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);//獲取從startend的字符串

  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的詳細用法請見:

  [Android教程]TextView使用SpannableString設置復合文本    http://orgcent.com/android-textview-spannablestring-span/

 

 

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>

 

  PS:本博文部分內容根據《老羅Android開發視頻教程》Android常用UI控件編程第五集、第六集學習總結而得,向羅老師致敬!

 

 

相關資料:

EditText中插入表情圖片(Character&SpannableString)   http://gundumw100.iteye.com/blog/904107

[Android教程]EditText大小(長寬)的多種設置方式     http://orgcent.com/android-edittext-ems-layout-minwidth-maxheight/

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM