Android EditText 編輯框的使用

項目當中用到了EditText  , 讓這個控件折磨了一個下午

先來看看 他的一些屬性吧 也都是在網上找到了,轉自下面的地址

http://blog.sina.com.cn/s/blog_87216a00010104sk.html

那我下午糾結的地方是哪呢?

其實網上也有很多的地,可以參考,我也是小小的初學者! 動態的監聽輸入的內容,來過濾輸入內容

也就是說輸入了一下 不想輸入的東西的時候,讓他輸入不上:

那怎麼辦呢,直接上代碼:

1.給EditText添加一個TextWatcher

Pwd=(EditText)find......; 都懂吧,找到這個控件! 

Pwd.addTextChangedListener(new SearchWather(Pwd));

2.自定義內部類SearchWather 

class SearchWather implements TextWatcher{
      //監聽改變的文本框  
      private EditText editText;    
      public SearchWather(EditText editText){  
          this.editText = editText;  
      }  
      @Override  
      public void onTextChanged(CharSequence ss, int start, int before, int count) {  
          String editable = editText.getText().toString();  
          String str = stringFilter(editable.toString());
          if(!editable.equals(str)){
              editText.setText(str);
              //設置新的光標所在位置  
              editText.setSelection(str.length());
          }
      }  
  
      @Override  
      public void afterTextChanged(Editable s) {  
  
      }  
      @Override  
      public void beforeTextChanged(CharSequence s, int start, int count,int after) {  
  
      }


  }  
  
  
  public static String stringFilter(String str)throws PatternSyntaxException{     
      // 只允許字母和數字       
      String   regEx  =  "[^a-zA-Z0-9]";                     
      Pattern   p   =   Pattern.compile(regEx);     
      Matcher   m   =   p.matcher(str);     
      return   m.replaceAll("").trim();     
  }

就是加個文本 變更的監聽

重寫下面的三個方法,三個方法沒必要都寫,哪個適合自己的項目就用哪個

   onTextChanged 輸入的內容變更時  執行

   afterTextChanged  輸入的內容變更後 執行  

beforeTextChanged  撒呼入的內容變更 之前


重點的是這個stringFilter這個方法  這個方法自己定義

主要就是對輸入的內容進行判斷,主要就是在這個方法內些,   這個方法也黑簡單呀 其實難點是在方法中的正則表達式,讓人歡喜讓人憂呀 ,正則大家自己在去看

  editText.setSelection(str.length());

這句代碼是很必要的 ,在內容改變的同時 ,光標跑到了最前面,用這個方法放到 最後

 

那麼在同一個畫面有多個 編輯框 需要不同的輸入限制的時候怎麼辦呢?

那就寫多個public static String stringFilter(String str)throws PatternSyntaxException 


 在監聽的放法中調用這些你寫的方法返回你要的字符串 ,這樣有與新問題了

一個編輯框 過濾多次 顯然是不行的,因爲每個方法 都是給 一個編輯框準備的

onTextChanged方法中不能 爲一個編輯框調用連個自定義的過濾字符串的方法 

那怎麼辦呢?

就是要 在寫個構造器

   public SearchWather(EditText editText,String string){  
          this.editText = editText;  

 this.string= string;
      }  

  
   通過這個構造器 給編輯框 設置 監聽器在onTextChanged方法中 判斷 string 的值,

不同的值對應 不同的 stringFilter 方法,還有小心string 是null的時候 一般初始化的時候 給string=""; 



 

EditText繼承關係:View-->TextView-->EditText

 EditText的屬性很多,這裏介紹幾個:
android:hint="請輸入數字!"//設置顯示在空間上的提示信息
android:numeric="integer"//設置只能輸入整數,如果是小數則是:decimal
android:singleLine="true"//設置單行輸入,一旦設置爲true,則文字不會自動換行。
android:password="true"//設置只能輸入密碼
android:textColor = "#ff8c00"//字體顏色
android:textStyle="bold"//字體,bold, italic, bolditalic
android:textSize="20dip"//大小
android:capitalize = "characters"//以大寫字母寫
android:textAlign="center"//EditText沒有這個屬性,但TextView有,居中
android:textColorHighlight="#cccccc"//被選中文字的底色,默認爲藍色
android:textColorHint="#ffff00"//設置提示信息文字的顏色,默認爲灰色android:textScaleX="1.5"//控制字與字之間的間距
android:typeface="monospace"//字型,normal, sans, serif, monospace (標準、無襯線字體、襯線字體、等寬字體)
android:background="@null"//背景,這裏沒有,指透明
android:layout_weight="1"//權重,控制控件之間的地位,在控制控件顯示的大小時蠻有用的。
android:textAppearance="?android:attr/textAppearanceLargeInverse"//文字外觀
android:layout_gravity="center_vertical"//設置控件顯示的位置:默認top,這裏居中顯示,還有bottom

android:gray="top" //多行中指針在第一行第一位置

et.setSelection(et.length());//調整光標到最後一行

android:autoText //自動拼寫幫助

android:capitalize //首字母大寫

android:digits //設置只接受某些數字

Android:singleLine//是否單行或者多行,回車是離開文本框還是文本框增加新行

android:numeric //只接受數字

android:phoneNumber //輸入電話號碼

android:editable //是否可編輯

android:autoLink=”all” //設置文本超鏈接樣式當點擊網址時,跳向該網址

android:textAppearance="?android:attr/textAppearanceLargeInverse"//文字外觀,這裏引用的是系統自帶的一個外觀,?表示系統是否有這種外觀,否則使用默認的外觀。不知道這樣理解對不對?
      

 屬性名稱描述

  android:autoLink設置是否當文本爲URL鏈接/email/電話號碼/map時,文本顯示爲可點擊的鏈接。可選值(none/web/email/phone/map/all)

  android:autoText如果設置,將自動執行輸入值的拼寫糾正。此處無效果,在顯示輸入法並輸入的時候起作用。

  android:bufferType指定getText()方式取得的文本類別。選項editable 類似於StringBuilder可追加字符,

  也就是說getText後可調用append方法設置文本內容。spannable 則可在給定的字符區域使用樣式,參見這裏1、這裏2。

  android:capitalize設置英文字母大寫類型。此處無效果,需要彈出輸入法才能看得到,參見EditView此屬性說明。

  android:cursorVisible設定光標爲顯示/隱藏,默認顯示。

  android:digits設置允許輸入哪些字符。如“1234567890.+-*/% ()”

  android:drawableBottom在text的下方輸出一個drawable,如圖片。如果指定一個顏色的話會把text的背景設爲該顏色,並且同時和background使用時覆蓋後者。

  android:drawableLeft在text的左邊輸出一個drawable,如圖片。

  android:drawablePadding設置text與drawable(圖片)的間隔,與drawableLeft、drawableRight、drawableTop、drawableBottom一起使用,可設置爲負數,單獨使用沒有效果。

android:drawableRight在text的右邊輸出一個drawable,如圖片。

android:drawableTop在text的正上方輸出一個drawable,如圖片。

android:editable設置是否可編輯。這裏無效果,參見EditView。

android:editorExtras設置文本的額外的輸入數據。在EditView再討論。

android:ellipsize設置當文字過長時,該控件該如何顯示。有如下值設置:”start”—?省略號顯示在開頭;”end”——省略號顯示在結尾;”middle”—-省略號顯示在中間;”marquee” ——以跑馬燈的方式顯示(動畫橫向移動)

android:freezesText設置保存文本的內容以及光標的位置。參見:這裏。

android:gravity設置文本位置,如設置成“center”,文本將居中顯示。

android:hintText爲空時顯示的文字提示信息,可通過textColorHint設置提示信息的顏色。此屬性在EditView中使用,但是這裏也可以用。

android:imeOptions附加功能,設置右下角IME動作與編輯框相關的動作,如actionDone右下角將顯示一個“完成”,而不設置默認是一個回車符號。這個在EditView中再詳細說明,此處無用。

android:imeActionId設置IME動作ID。在EditView再做說明,可以先看這篇帖子:這裏。

android:imeActionLabel設置IME動作標籤。在EditView再做說明。
android:includeFontPadding設置文本是否包含頂部和底部額外空白,默認爲true。
android:inputMethod爲文本指定輸入法,需要完全限定名(完整的包名)。例如:com.google.android.inputmethod.pinyin,但是這裏報錯找不到。
android:inputType設置文本的類型,用於幫助輸入法顯示合適的鍵盤類型。在EditView中再詳細說明,這裏無效果。
android:linksClickable設置鏈接是否點擊連接,即使設置了autoLink。
android:marqueeRepeatLimit在ellipsize指定marquee的情況下,設置重複滾動的次數,當設置爲marquee_forever時表示無限次。
android:ems設置TextView的寬度爲N個字符的寬度。這裏測試爲一個漢字字符寬度,如圖:
android:maxEms設置TextView的寬度爲最長爲N個字符的寬度。與ems同時使用時覆蓋ems選項。
android:minEms設置TextView的寬度爲最短爲N個字符的寬度。與ems同時使用時覆蓋ems選項。
android:maxLength限制顯示的文本長度,超出部分不顯示。
android:lines設置文本的行數,設置兩行就顯示兩行,即使第二行沒有數據。
android:maxLines設置文本的最大顯示行數,與width或者layout_width結合使用,超出部分自動換行,超出行數將不顯示。
android:minLines設置文本的最小行數,與lines類似。
android:lineSpacingExtra設置行間距。
android:lineSpacingMultiplier設置行間距的倍數。如”1.2”
android:numeric如果被設置,該TextView有一個數字輸入法。此處無用,設置後唯一效果是TextView有點擊效果,此屬性在EdtiView將詳細說明。
android:password以小點”.”顯示文本
android:phoneNumber設置爲電話號碼的輸入方式。
android:privateImeOptions設置輸入法選項,此處無用,在EditText將進一步討論。
android:scrollHorizontally設置文本超出TextView的寬度的情況下,是否出現橫拉條。
android:selectAllOnFocus如果文本是可選擇的,讓他獲取焦點而不是將光標移動爲文本的開始位置或者末尾位置。TextView中設置後無效果。
android:shadowColor指定文本陰影的顏色,需要與shadowRadius一起使用。效果:

android:shadowDx設置陰影橫向座標開始位置。

android:shadowDy設置陰影縱向座標開始位置。

android:shadowRadius設置陰影的半徑。設置爲0.1就變成字體的顏色了,一般設置爲3.0的效果比較好。

android:singleLine設置單行顯示。如果和layout_width一起使用,當文本不能全部顯示時,後面用“…”來表示。如android:text="test_ singleLine " android:singleLine="true" android:layout_width="20dp"將只顯示“t…”。如果不設置singleLine或者設置爲false,文本將自動換行

android:shadowDx設置陰影橫向座標開始位置。

  android:shadowDy設置陰影縱向座標開始位置。

  android:shadowRadius設置陰影的半徑。設置爲0.1就變成字體的顏色了,一般設置爲3.0的效果比較好。

  android:singleLine設置單行顯示。如果和layout_width一起使用,當文本不能全部顯示時,後面用“…”來表示。如android:text="test_ singleLine " android:singleLine="true" android:layout_width="20dp"將只顯示“t…”。如果不設置singleLine或者設置爲false,文本將自動換行

  android:text設置顯示文本.

 android:textSize設置文字大小,推薦度量單位”sp”,如”15sp”

  android:textStyle設置字形[bold(粗體) 0, italic(斜體) 1, bolditalic(又粗又斜) 2] 可以設置一個或多個,用“|”隔開

  android:typeface設置文本字體,必須是以下常量值之一:normal 0, sans 1, serif 2, monospace(等寬字體) 3]

  android:height設置文本區域的高度,支持度量單位:px(像素)/dp/sp/in/mm(毫米)

  android:maxHeight設置文本區域的最大高度

  android:minHeight設置文本區域的最小高度

  android:width設置文本區域的寬度,支持度量單位:px(像素)/dp/sp/in/mm(毫米),與layout_width的區別看這裏。

  android:maxWidth設置文本區域的最大寬度

  android:minWidth設置文本區域的最小寬度

  android:textAppearance設置文字外觀。如“?android:attr/textAppearanceLargeInverse”這裏引用的是系統自帶的一個外觀,?表示系統是否有這種外觀,否則使用默認的外觀。可設置的值如下:textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse/textAppearanceSmall/textAppearanceSmallInverse

  android:textAppearance設置文字外觀。如“?android:attr/textAppearanceLargeInverse

”這裏引用的是系統自帶的一個外觀,?表示系統是否有這種外觀,否則使用默認的外觀。可設置的值如下: 

textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse



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