国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

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

2020-04-11 11:36:58
字體:
供稿:網(wǎng)友

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

這里總結(jié)了三種方法如下:

方法一:

1. 引用兩個命名空間:

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

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

定義EditText mEditText對象

2. 控制字符長度:

通過InputFilter過濾來實(shí)現(xiàn)字符長度控制,這樣的好處是可以實(shí)現(xiàn)動態(tài)長度控制,而不是一個長度定值

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 = "http:///:*?<>|/"/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. 定義函數(shù):

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. 添加監(jiān)聽事件:

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()); //光標(biāo)置后  }   }  @Override  public void beforeTextChanged(CharSequence s, int start, int count,   int after) {  }  @Override  public void afterTextChanged(Editable s) {  } });

方法三:

int mMaxLenth = 200;//設(shè)置允許輸入的字符長度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);  }  } });

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

第三種方法沒有問題。

希望本文所述對大家的Android程序設(shè)計(jì)有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 璧山县| 皋兰县| 县级市| 西安市| 溧水县| 平乡县| 郯城县| 长宁区| 波密县| 商都县| 绥棱县| 景宁| 兴和县| 灵石县| 广灵县| 通海县| 墨竹工卡县| 银川市| 万全县| 云阳县| 于田县| 东宁县| 乌恰县| 大厂| 常州市| 讷河市| 海阳市| 云龙县| 疏勒县| 光山县| 当涂县| 扶沟县| 沁阳市| 商水县| 西盟| 固始县| 曲松县| 涿鹿县| 伊宁市| 城固县| 忻城县|