Android軟件開發之EditText 詳解

原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://xys289187120.blog.51cto.com/3361352/657189

 

EditText在API中的結構

java.lang.Object
 android.view.View
  android.widget.TextView
   android.widget.EditText
已知直接子類:
   AutoCompleteTextView, ExtractEditText
已知間接子類:
   MultiAutoCompleteTextView

EditText是TextView的直接子類 所以EditText會繼承父類TextView的一些方法。下面我用自己寫的一個Demo 和大家詳細的說明一下EditView的使用方法。


1.簡單的EditText輸入框

非常簡單,在layout佈局中配置一下EditText 在配置一個Button 在代碼中監聽Button 的事件 獲取當前EditView中輸入的內容並且顯示出來。
 


 
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:id="@+id/textviewll" 
  4.     android:orientation="vertical" android:layout_width="fill_parent" 
  5.     android:layout_height="fill_parent"> 
  6.     <EditText    
  7.       android:id="@+id/sample_edit_text0"      
  8.       android:layout_width="fill_parent"     
  9.       android:layout_height="wrap_content"   
  10.       android:text="簡單的EditText輸入框"/>   
  11.     <Button   
  12.       android:id="@+id/sample_button0" 
  13.       android:layout_width="fill_parent" android:layout_height="wrap_content" 
  14.       android:text="確定"/> 
  15. </LinearLayout> 
  1. public class SampleActivity extends Activity {  
  2.     @Override  
  3.     protected void onCreate(Bundle savedInstanceState) {  
  4.     setContentView(R.layout.sample);  
  5.       
  6.     final EditText editText0 = (EditText)findViewById(R.id.sample_edit_text0);  
  7.  
  8.     Button button0 = (Button)findViewById(R.id.sample_button0);  
  9.  
  10.     button0.setOnClickListener(new OnClickListener() {  
  11.           
  12.         @Override  
  13.         public void onClick(View arg0) {  
  14.         String str = editText0.getText().toString();  
  15.         Toast.makeText(SampleActivity.this,str, Toast.LENGTH_LONG).show();  
  16.         }  
  17.     });  
  18.  
  19.     super.onCreate(savedInstanceState);  
  20.     }  
2.限制EditText輸入框的內容 


在layout中配置信息

android:digits="1234567890.+-*/%\n()"
限制輸入框中只能輸入自己定義的這些字符串 如果輸入其它將不予以顯示
android:phoneNumber="true"
限制輸入框中只能輸入手機號碼
android:password="true"
限制輸入框中輸入的任何內容將以"*"符號來顯示
android:hint="默認文字"
輸入內容前默認顯示在輸入框中的文字

android:textColorHint="#FF0000"
設置文字內容顏色
android:enabled="false"
設置輸入框不能被編輯
 

3.編輯框中顯示圖片

上一篇講TextView中就講過在TextView中添加圖片的方法,因爲EditText是TextView的子類, 所以當然也可以添加圖片了,只是一旦在EditText中添加圖片以後是不能刪除的,如圖所示我可以編輯圖片旁邊的內容,寫入文字。 



 

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:id="@+id/textviewll" 
  4.     android:orientation="vertical"   
  5.     android:layout_width="fill_parent" 
  6.     android:layout_height="fill_parent" 
  7.     > 
  8.     <EditText   
  9.               android:layout_width="wrap_content"   
  10.               android:layout_height="wrap_content" 
  11.               android:text="在圖片下方" 
  12.               android:textColor="#FF0000" 
  13.               android:drawableBottom="@drawable/jay" 
  14.               android:layout_alignParentTop="true" 
  15.               android:layout_centerHorizontal="true" 
  16.               > 
  17.      </EditText> 
  18.     
  19.      <EditText   
  20.               android:layout_width="wrap_content"   
  21.               android:layout_height="wrap_content" 
  22.               android:text="在圖片上方" 
  23.               android:textColor="#FF0000" 
  24.               android:drawableTop="@drawable/jay" 
  25.               android:layout_alignParentBottom="true" 
  26.               android:layout_centerHorizontal="true" 
  27.               > 
  28.      </EditText>   
  29.      <EditText   
  30.               android:layout_width="wrap_content"   
  31.               android:layout_height="wrap_content" 
  32.               android:text="在圖片左邊" 
  33.               android:textColor="#FF0000" 
  34.               android:drawableLeft="@drawable/jay" 
  35.              android:layout_alignParentLeft="true" 
  36.               android:layout_centerVertical="true" 
  37.               > 
  38.      </EditText>      
  39.      <EditText   
  40.               android:layout_width="wrap_content"   
  41.               android:layout_height="wrap_content" 
  42.               android:text="在圖片右邊" 
  43.               android:textColor="#FF0000" 
  44.               android:drawableRight="@drawable/jay" 
  45.               android:layout_alignParentRight="true" 
  46.               android:layout_centerVertical="true" 
  47.               > 
  48.      </EditText>   
  49.  
  50. </RelativeLayout > 

4.設置軟鍵盤的Enter鍵

如圖所示我們可以修改軟鍵盤的Enter按鈕的樣式,可以在代碼中監聽 按鈕點擊事件。 

 

  1. package cn.m15.xys;  
  2.  
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.KeyEvent;  
  6. import android.view.inputmethod.EditorInfo;  
  7. import android.widget.EditText;  
  8. import android.widget.TextView;  
  9. import android.widget.Toast;  
  10. import android.widget.TextView.OnEditorActionListener;  
  11.  
  12. public class KeyBoardActivity extends Activity {  
  13.     @Override  
  14.     protected void onCreate(Bundle savedInstanceState) {  
  15.     setContentView(R.layout.keyboard);  
  16.  
  17.     EditText editText0 = (EditText)findViewById(R.id.txtTest0);  
  18.       
  19.     editText0.setOnEditorActionListener(new OnEditorActionListener() {  
  20.  
  21.         @Override  
  22.         public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {  
  23.         if (arg1 == EditorInfo.IME_ACTION_GO) {  
  24.             Toast.makeText(KeyBoardActivity.this, "你點了軟鍵盤'去往'按鈕",  
  25.                 Toast.LENGTH_SHORT).show();  
  26.         }  
  27.         return false;  
  28.         }  
  29.     });  
  30.     EditText editText1 = (EditText)findViewById(R.id.txtTest1);  
  31.       
  32.     editText1.setOnEditorActionListener(new OnEditorActionListener() {  
  33.  
  34.         @Override  
  35.         public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {  
  36.         if (arg1 == EditorInfo.IME_ACTION_SEARCH) {  
  37.             Toast.makeText(KeyBoardActivity.this, "你點了軟鍵盤'搜索'按鈕",  
  38.                 Toast.LENGTH_SHORT).show();  
  39.         }  
  40.         return false;  
  41.         }  
  42.     });  
  43.     EditText editText2 = (EditText)findViewById(R.id.txtTest2);  
  44.       
  45.     editText2.setOnEditorActionListener(new OnEditorActionListener() {  
  46.  
  47.         @Override  
  48.         public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {  
  49.         if (arg1 == EditorInfo.IME_ACTION_SEND) {  
  50.             Toast.makeText(KeyBoardActivity.this, "你點了軟鍵盤'發送'按鈕",  
  51.                 Toast.LENGTH_SHORT).show();  
  52.         }  
  53.         return false;  
  54.         }  
  55.     });  
  56.     EditText editText3 = (EditText)findViewById(R.id.txtTest3);  
  57.       
  58.     editText3.setOnEditorActionListener(new OnEditorActionListener() {  
  59.  
  60.         @Override  
  61.         public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {  
  62.         if (arg1 == EditorInfo.IME_ACTION_NEXT) {  
  63.             Toast.makeText(KeyBoardActivity.this, "你點了軟鍵盤'下一個'按鈕",  
  64.                 Toast.LENGTH_SHORT).show();  
  65.         }  
  66.         return false;  
  67.         }  
  68.     });  
  69.     EditText editText4 = (EditText)findViewById(R.id.txtTest4);  
  70.       
  71.     editText4.setOnEditorActionListener(new OnEditorActionListener() {  
  72.  
  73.         @Override  
  74.         public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {  
  75.         if (arg1 == EditorInfo.IME_ACTION_DONE) {  
  76.             Toast.makeText(KeyBoardActivity.this, "你點了軟鍵盤'完成'按鈕",  
  77.                 Toast.LENGTH_SHORT).show();  
  78.         }  
  79.         return false;  
  80.         }  
  81.     });  
  82.     EditText editText5 = (EditText)findViewById(R.id.txtTest5);  
  83.       
  84.     editText5.setOnEditorActionListener(new OnEditorActionListener() {  
  85.  
  86.         @Override  
  87.         public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {  
  88.         if (arg1 == EditorInfo.IME_ACTION_UNSPECIFIED) {  
  89.             Toast.makeText(KeyBoardActivity.this, "你點了軟鍵盤'未指定'按鈕",  
  90.                 Toast.LENGTH_SHORT).show();  
  91.         }  
  92.         return false;  
  93.         }  
  94.     });  
  95.     super.onCreate(savedInstanceState);  
  96.     }  
  97. }  

 
 監聽軟鍵盤的點擊事件 

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:id="@+id/textviewll" 
  4.     android:orientation="vertical" android:layout_width="fill_parent" 
  5.     android:layout_height="fill_parent"> 
  6.     <EditText android:id="@+id/txtTest0"   
  7.      android:imeOptions="actionGo" 
  8.      android:layout_width="fill_parent" 
  9.      android:layout_height="wrap_content" 
  10.      android:hint="特殊按鈕-去往" 
  11.      ></EditText> 
  12.     <EditText android:id="@+id/txtTest1"   
  13.      android:imeOptions="actionSearch" 
  14.      android:layout_width="fill_parent" 
  15.      android:layout_height="wrap_content" 
  16.      android:hint="特殊按鈕-搜索" 
  17.      ></EditText> 
  18.     <EditText android:id="@+id/txtTest2"   
  19.      android:imeOptions="actionSend" 
  20.      android:layout_width="fill_parent" 
  21.      android:layout_height="wrap_content" 
  22.      android:hint="特殊按鈕-發送" 
  23.      ></EditText> 
  24.     <EditText android:id="@+id/txtTest3"   
  25.      android:imeOptions="actionNext" 
  26.      android:layout_width="fill_parent" 
  27.      android:layout_height="wrap_content" 
  28.      android:hint="特殊按鈕-下一個" 
  29.      ></EditText> 
  30.     <EditText android:id="@+id/txtTest4"   
  31.      android:imeOptions="actionDone" 
  32.      android:layout_width="fill_parent" 
  33.      android:layout_height="wrap_content" 
  34.      android:hint="特殊按鈕-完成" 
  35.      ></EditText> 
  36.     <EditText android:id="@+id/txtTest5"   
  37.      android:imeOptions="actionUnspecified" 
  38.      android:layout_width="fill_parent" 
  39.      android:layout_height="wrap_content" 
  40.      android:hint="特殊按鈕-未指定" 
  41.      ></EditText> 
  42.  
  43. </LinearLayout> 

5.監聽軟鍵盤的按鍵事件

做項目的時候 有時候須要在用戶輸入內容時做檢測,比如如果用戶輸入不合法的內容不予以顯示在EditText中, 這時候我就要用到addTextChangedListener 用它來監聽用戶輸入狀態。可以在監聽中改變用戶輸入的內容或者提示用戶輸入內容不合法等等。 如圖所示我的每次輸入操作都可以被正常的監聽出來,用戶輸入內容的正常流程 beforeTextChanged() -》onTextChanged() -》afterTextChanged()然後是通知屏幕繪製 顯示在屏幕上 所以我們可以在這三個方法中來修改用戶輸入內容 或者截取用戶輸入的內容。  

  1. package cn.m15.xys;  
  2.  
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.text.Editable;  
  6. import android.text.TextWatcher;  
  7. import android.widget.EditText;  
  8. import android.widget.TextView;  
  9.  
  10. public class MonitorKeyActivity extends Activity {  
  11.     @Override  
  12.     protected void onCreate(Bundle savedInstanceState) {  
  13.     setContentView(R.layout.monitorkey);  
  14.     EditText editText = (EditText)findViewById(R.id.monitor_edit_text0);  
  15.     final TextView textView0 = (TextView)findViewById(R.id.monitor_text0);  
  16.     final TextView textView1 = (TextView)findViewById(R.id.monitor_text1);  
  17.     final TextView textView2 = (TextView)findViewById(R.id.monitor_text2);  
  18.       
  19.     editText.addTextChangedListener(new TextWatcher() {  
  20.           
  21.         @Override  
  22.         public void onTextChanged(CharSequence text, int start, int before, int count) {  
  23.                 //text  輸入框中改變後的字符串信息  
  24.         //start 輸入框中改變後的字符串的起始位置  
  25.         //before 輸入框中改變前的字符串的位置 默認爲0  
  26.         //count 輸入框中改變後的一共輸入字符串的數量  
  27.         textView1.setText("輸入後字符串 [ " + text.toString() + " ] 起始光標 [ " + start + " ] 輸入數量 [ " + count+" ]");  
  28.           
  29.         }  
  30.           
  31.         @Override  
  32.         public void beforeTextChanged(CharSequence text, int start, int count,int after) {  
  33.         //text  輸入框中改變前的字符串信息  
  34.         //start 輸入框中改變前的字符串的起始位置  
  35.         //count 輸入框中改變前後的字符串改變數量一般爲0  
  36.         //after 輸入框中改變後的字符串與起始位置的偏移量  
  37.         System.out.println(text.toString());  
  38.         textView0.setText("輸入前字符串 [ " + text.toString() + " ]起始光標 [ " + start + " ]結束偏移量  [" + after + " ]");  
  39.         }  
  40.           
  41.         @Override  
  42.         public void afterTextChanged(Editable edit) {  
  43.         //edit  輸入結束呈現在輸入框中的信息  
  44.         textView2.setText("輸入結束後的內容爲 [" + edit.toString()+" ] 即將顯示在屏幕上");  
  45.         }  
  46.     });  
  47.       
  48.     super.onCreate(savedInstanceState);  
  49.     }  
  50. }  
 
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:id="@+id/textviewll" 
  4.     android:orientation="vertical" android:layout_width="fill_parent" 
  5.     android:layout_height="fill_parent"> 
  6.     <TextView    
  7.       android:id="@+id/monitor_text0"      
  8.       android:layout_width="fill_parent"     
  9.       android:layout_height="wrap_content"   
  10.       android:textSize="18dip" 
  11.       android:textColor="#FF0000"/>   
  12.     <TextView    
  13.       android:id="@+id/monitor_text1"      
  14.       android:layout_width="fill_parent"     
  15.       android:layout_height="wrap_content" 
  16.       android:textSize="18dip" 
  17.       android:textColor="#FF0000" 
  18.       />   
  19.     <TextView    
  20.       android:id="@+id/monitor_text2"      
  21.       android:layout_width="fill_parent"     
  22.       android:layout_height="wrap_content" 
  23.       android:textSize="18dip" 
  24.       android:textColor="#FF0000" 
  25.       />   
  26.     <EditText    
  27.       android:id="@+id/monitor_edit_text0"      
  28.       android:layout_width="fill_parent"     
  29.       android:layout_height="wrap_content"   
  30.       android:hint="監聽軟鍵盤按鍵的輸入狀態"/>   
  31. </LinearLayout>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章