1. 程式人生 > >(轉)EditText限制輸入字元型別的幾種方式

(轉)EditText限制輸入字元型別的幾種方式

轉載自:

1、第一種方式是通過EditText的inputType來實現,可以通過xml或者Java檔案來設定。假如我要設定為顯示密碼的形式,可以像下面這樣設定:

在xml中,   Android:inputType="textPassword"

在java檔案中,可以用 myEditText.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

當然,還有更多的其他屬性用來進行輸入設定。

2、第二種是通過android:digits 屬性來設定,這種方式可以指出要顯示的字元,比如我要限制只顯示數字,可以這樣:

        android:digits="0123456789"

如果要顯示的內容比較多,就比較麻煩了,將要顯示的內容依次寫在裡面。

3、通過正則表示式來判斷。下面的例子只允許顯示字母、數字和漢字。

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

然後需要在TextWatcher的onTextChanged()中呼叫這個函式,

@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());
          }
      }  

4、通過InputFilter來實現。

實現InputFilter過濾器,需要覆蓋一個叫filter的方法。

public abstract CharSequence filter ( 

    CharSequence source,  //輸入的文字 

    int start,  //開始位置 

    int end,  //結束位置 

    Spanned dest, //當前顯示的內容 

    int dstart,  //當前開始位置 

    int dend //當前結束位置 

);

下面的實現使得EditText只接收字元(數字、字母和漢字)和“-”“_”,Character.isLetterOrDigit會把中文也當做Letter。

editText.setFilters(new InputFilter[] { 

new InputFilter() {      public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {              for (int i = start; i < end; i++) {                      if ( !Character.isLetterOrDigit(source.charAt(i)) && !Character.toString(source.charAt(i)) .equals("_") && !Character.toString(source.charAt(i)) .equals("-")) {                              return "";                      }              }              return null; 

    }  }); 

另外使用InputFilter還能限制輸入的字元個數,如

        EditText tv =newEditText(this); 
        int maxLength =10; 
        InputFilter[] fArray =new InputFilter[1]; 
        fArray[0]=new  InputFilter.LengthFilter(maxLength); 
        tv.setFilters(fArray);

上面的程式碼可以限制輸入的字元數最大為10。

1、第一種方式是通過EditText的inputType來實現,可以通過xml或者Java檔案來設定。假如我要設定為顯示密碼的形式,可以像下面這樣設定:

在xml中,   Android:inputType="textPassword"

在java檔案中,可以用 myEditText.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

當然,還有更多的其他屬性用來進行輸入設定。

2、第二種是通過android:digits 屬性來設定,這種方式可以指出要顯示的字元,比如我要限制只顯示數字,可以這樣:

        android:digits="0123456789"

如果要顯示的內容比較多,就比較麻煩了,將要顯示的內容依次寫在裡面。

3、通過正則表示式來判斷。下面的例子只允許顯示字母、數字和漢字。

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

然後需要在TextWatcher的onTextChanged()中呼叫這個函式,

@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());
          }
      }  

4、通過InputFilter來實現。

實現InputFilter過濾器,需要覆蓋一個叫filter的方法。

public abstract CharSequence filter ( 

    CharSequence source,  //輸入的文字 

    int start,  //開始位置 

    int end,  //結束位置 

    Spanned dest, //當前顯示的內容 

    int dstart,  //當前開始位置 

    int dend //當前結束位置 

);

下面的實現使得EditText只接收字元(數字、字母和漢字)和“-”“_”,Character.isLetterOrDigit會把中文也當做Letter。

editText.setFilters(new InputFilter[] { 

new InputFilter() {      public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {              for (int i = start; i < end; i++) {                      if ( !Character.isLetterOrDigit(source.charAt(i)) && !Character.toString(source.charAt(i)) .equals("_") && !Character.toString(source.charAt(i)) .equals("-")) {                              return "";                      }              }              return null; 

    }  }); 

另外使用InputFilter還能限制輸入的字元個數,如

        EditText tv =newEditText(this); 
        int maxLength =10; 
        InputFilter[] fArray =new InputFilter[1]; 
        fArray[0]=new  InputFilter.LengthFilter(maxLength); 
        tv.setFilters(fArray);

上面的程式碼可以限制輸入的字元數最大為10。

相關推薦

EditText限制輸入字元型別方式

轉載自: 1、第一種方式是通過EditText的inputType來實現,可以通過xml或者Java檔案來設定。假如我要設定為顯示密碼的形式,可以像下面這樣設定: 在xml中,   Android:inputType="textPassword" 在java檔案中,

EditText限制輸入字元型別

最近有一個EditText內只能輸入數字,字母,漢字的字元型別限制,隨手整理一下,有新的內容以後在做修改 fun stringFilter(str: String): String { val regEx = "[^a-zA-Z0-9\u4E00-\u9

Android EditText限制輸入字元的5實現方式

         最近專案要求限制密碼輸入的字元型別, 例如不能輸入中文。   現在總結一下EditText的各種實現方式,  以比較各種方法的優劣。  第一種方式:  設定EditText的inputType屬性,可以通過xml或者java檔案來設定。假如我要設定為顯示

mybatis常用jdbcType資料型別

Mybatis中javaType和jdbcType對應和CRUD例子 <resultMap type="java.util.Map" id="resultjcm"> <result property="FLD_NUMBER" column="FLD

Edittext限制輸入字元長度,解決中英文混用情況保證規定長度

好比知乎中的提問流程,提問內容不應該太長,所以會進行事先設定;最後我使用InputFilter解決了這個問題,程式碼如下。         首先普及一下GB18030編碼標準:GB 18030,全稱:國家標準 GB 18030-2005《資訊科技中文編碼字符集》,是中華人民

關於金鑰管理的個設計原則

關於金鑰管理的幾個設計原則 網路安全有賴於金鑰管理的有效性,即保證密碼的產生,儲存,傳輸和使用的安全性,這就要求對金鑰進行有效的管理。 1,任何密碼不以明文的方式進行儲存,除非是放在足夠安全的密碼裝置內。人工分配的金鑰必須以金鑰分量方式分別由不同的多個可信任的實體保

SSH深度歷險 深入淺出----- Spring事務配置的五方式

配置 處理 數據 data easy ont get 添加 由於 這對時間在學習SSH中Spring架構,Spring的事務配置做了具體總結。在此之間對Spring的事務配置僅僅是停留在聽說的階段,總結一下。總體把控。通過這次的學習發覺Spring的事務

Mac 中顯示資源庫Library文件夾目錄的方法

方法 flag 命令 lib 10.6 選擇 str div fin Mac中Library目錄在10.6.7系統之後默認隱藏的,要想找到此文件夾有如下幾種方法: 1. 用命令可以使其顯示:在終端中執行命令: chflags nohidden ~/Library 可顯示

python學習之網站的編寫HTML,CSS,JS二十一----------事件例如點選事件等及繫結事件的方式

事件:什麼叫做事件呢,就是我們在頁面中的一些滑鼠和鍵盤操作,比如onclick就是點選事件,然後我們將介紹幾種繫結事件的方式。 1.在標籤中繫結 <div onclick="fuc()"></div> <script> fun

Spring基礎2——Spring中裝入bean的方法

上一篇文章描述了spring裝配bean的自動化裝配技術 下面主要描述一下spring裝配bean的顯示配置,其中顯示配置有兩種方案,Java配置和XML。 為啥需要有顯示配置的?其實主要是考慮到第三方外掛,我們無法通過標註@Component和@Autowir

分散式理論基礎一致性及解決一致性的兩方式:2PC和3PC 轉載 不錯

分散式理論基礎(一)一致性及解決一致性的兩種方式:2PC和3PC 1 一致性 1.1 簡述 一致性,是指對每個節點一個數據的更新,整個叢集都知道更新,並且是一致的 假設一個具有N個節點的分散式系統,當其滿足以下條件時,我們說這個系統滿足一致性: 全認同: 所有N個節點都認同一個結果 值合法: 該結果必須

OpenCV筆記2——影象相似度對比的辦法

對計算影象相似度的方法,本文做了如下總結,主要有三種辦法: 1.PSNR峰值信噪比 PSNR(Peak Signal to Noise Ratio),一種全參考的影象質量評價指標。 簡介:https://en.wikipedia.org/wiki/Peak_signal-to-noise

opencv學習之畫素遍歷三方式耗時分析

前面用兩篇介紹了畫素的顏色空間縮減、查詢表、遍歷畫素的三種方式、程式計時等,也說了一下每種方法的優缺點,現在用一個綜合型的程式進行對比。方式是用三種方式對lena影象(220x220)進行處理,使其顏色種類從256中變成64種。在顏色空間縮減方法中講過這種方式,

、獲取Keystone token的三方式

讓我們粗略看一下,三種從Keystone獲得token的方式。在嘗試這三種方式之前,你得確保已經裝好Keystone終端。如果還沒有裝好,可以看grizzly安裝版本的Keystone 安裝部分。 Note:這些呼叫都將請求的是Keystone v2版本

SpringBoot整合MyBatisiBatis,基於註解和XML兩方式

工具 IDEA Maven 專案建立 1. 通過IDEA建立SpringBoot專案 2. 結構目錄和JAVA版本選擇 3. 新增MySQL和MyBatis支援 4. 新增Lombok外掛,簡化GET、SET方法 5. WEB支援和啟動類 6. 專

網路安全1 -- 防止網頁被frame的方法

在我們平時的開發中,如果網頁沒有做防frame的處理,有可能被駭客利用,進行ClickJacking攻擊,對網站造成損害。 其實在我們的日常開發中,養成這種安全意識的習慣,很容易就可以避免大部分的攻擊力了。 以下幾種方法可以防止被 FRAME 載入你的網站頁面 1. met

Java多執行緒——實現多執行緒的兩方式

java實現多執行緒的常用方式有兩種:繼承Thread類、實現Runnable介面實現run方法。 繼承Thread實現方式: public class ThreadTest extends Thread{ private int tick

JTextField限制輸入資料型別java GUI

package javaBasic; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ControlClass { public static void main(String[] a

Sublime Text 3 配置java程序運行環境可進行控制臺輸入

tro [0 回車 enc str nbsp scan bsp source 博主配置前的情況1. 64位筆記本 2. win10系統 3. 已配置好java環境 4. 已安裝好sublime並配置好Package Control組件 具體過程:   1. Sub

輸入pipt提示:AttributeError: 'module' object has no attribute 'HTTPSConnection'

bsp anaconda trac led module connect PE info soft 文章轉自:http://write.blog.csdn.net/postedit/51725016 1.測試 [root@s011805161450 ~]# python P