Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android同時控制EditText輸入字符個數和禁止特殊字符輸入的方法

android同時控制EditText輸入字符個數和禁止特殊字符輸入的方法

編輯:關於Android編程

本文實例講述了android同時控制EditText輸入字符個數和禁止特殊字符輸入的方法。分享給大家供大家參考。具體分析如下:

這裡總結了三種方法如下:

方法一:

1. 引用兩個命名空間:

import android.text.TextWatcher; 
import android.text.Editable;

用於禁止特殊字符輸入控制

定義EditText mEditText對象

2. 控制字符長度:

通過InputFilter過濾來實現字符長度控制,這樣的好處是可以實現動態長度控制,而不是一個長度定值

int mMaxLenth = 20;
InputFilter[] FilterArray = new InputFilter[1];
 FilterArray[0] = new InputFilter() {
  @Override
  public CharSequence filter (CharSequence source, int start, int end, 
   Spanned dest, int dstart, int dend){
  boolean bInvlid = false;
  int sourceLen = getCharacterNum(source.toString());
  int destLen = getCharacterNum(dest.toString());
  if (sourceLen + destLen > mMaxLenth) {
   return "";  }
  return source;
  }
 };
mEditText.setFilters(FilterArray);

3. 禁止特殊字符輸入:

 mEditText.addTextChangedListener(new TextWatcher() {
  String tmp = "";
  String digits = "/\\:*?<>|\"\n\t";
  @Override
  public void onTextChanged(CharSequence s, int start, int before,
   int count) {
  mEditText.setSelection(s.length());
  }
  @Override
  public void beforeTextChanged(CharSequence s, int start, int count,
   int after) {
  tmp = s.toString();
  }
  @Override
  public void afterTextChanged(Editable s) {
  String str = s.toString();
  if (str.equals(tmp)) {
   return;
  }
  StringBuffer sb = new StringBuffer();
  for (int i = 0; i < str.length(); i++) {
   if (digits.indexOf(str.charAt(i)) < 0) {
   sb.append(str.charAt(i));
   }
  }
  tmp = sb.toString();
  mEditText.setText(tmp);
  }
 });

方法二:

1. 添加引用:

import java.util.regex.*;

2. 定義函數:

public static String StringFilter(String str)throws PatternSyntaxException{ 
 String regEx = "[/\\:*?<>|\"\n\t]"; //要過濾掉的字符
 Pattern p = Pattern.compile(regEx); 
 Matcher m = p.matcher(str); 
 return m.replaceAll("").trim(); 
 }

3. 添加監聽事件:

mEditText.addTextChangedListener(new TextWatcher() {
  @Override
  public void onTextChanged(CharSequence s, int start, int before,
   int count) {
  String t = mEditText.getText().toString();
  String editable = mEditText.getText().toString(); 
  String str = stringFilter(editable.toString()); 
  if(!editable.equals(str)){ 
   mEditText.setText(str); 
   mEditText.setSelection(str.length()); //光標置後
  } 
  }
  @Override
  public void beforeTextChanged(CharSequence s, int start, int count,
   int after) {
  }
  @Override
  public void afterTextChanged(Editable s) {
  }
 });

方法三:

int mMaxLenth = 200;//設置允許輸入的字符長度
public static String stringFilter(String str)throws PatternSyntaxException{ 
 String regEx = "[/\\:*?<>|\"\n\t]";
 Pattern p = Pattern.compile(regEx);
 Matcher m = p.matcher(str);
 return m.replaceAll("");
 }
mEditText.addTextChangedListener(new TextWatcher() {
  private int cou = 0;
  int selectionEnd = 0;
  @Override
  public void onTextChanged(CharSequence s, int start, int before,
   int count) {
  cou = before + count;
  String editable = mEditText.getText().toString();
  String str = stringFilter(editable); //過濾特殊字符
  if (!editable.equals(str)) {
   mEditText.setText(str);
  }
  mEditText.setSelection(mEditText.length());
  cou = mEditText.length();
  }
  @Override
  public void beforeTextChanged(CharSequence s, int start, int count,
   int after) {
  }
  @Override
  public void afterTextChanged(Editable s) {
  if (cou > mMaxLenth) {
   selectionEnd = mEditText.getSelectionEnd();
   s.delete(mMaxLenth, selectionEnd);
  }
  }
 });

以上代碼都經過測試,給大家共享!對於第一,二,兩種方法在三星NOTE 2中會有個問題(其他手機沒有問題),並且輸入窗口會出現跳動;具體原因,感興趣的朋友可以調試一下!

第三種方法沒有問題。

希望本文所述對大家的Android程序設計有所幫助。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved