自定义TextWatcher:实现EditText输入字符限制

做Android开发都知道,诸如TextView,EditText等控件有一个属性android:maxLength=""来控制我们的控件可以输入文字的长度。不过这个长度并没有区分中文与英文,比如设置maxLength="50",此时既可以输入50个汉字,也可以输入50个数据或英文。但是在应用中,我们有的输入框对输入的文字长度是用字符限制的,比如输入100个字符,,那要求只能输入50个中文或是100个英文等。这个时候,我们可以自定义个类继承TextWatcher,然后再调用EditText.addTextChangedListener(),传入对应的参数就可以了。

————————————-自定义工具类——————————————–

public class ChineseOrEnglishTextWatcher implements TextWatcher {/**要进行文字输入限制的EditText*/private EditText mFilter;/**限制的字符数量*/private int length;/**空格控制:防止有些手机在进行编辑信息时 空位在最前面*/private boolean onceLoad = true;public ChineseOrEnglishTextWatcher(EditText mFilter, int length) {super();this.mFilter = mFilter;this.length = length;}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {int countSize = 0;Editable editable = mFilter.getText();String str = editable.toString();char[] array = str.toCharArray();int i = 0;if (onceLoad) {mFilter.setSelection(s.length());onceLoad = false;}for (i = 0; i < array.length; i++) {if ((char) (byte) array[i] != array[i])/**判断是否为中文*/{countSize += 2;/**如果为中文或者中文特殊符号则占两个字节*/} else {countSize += 1;/**英文则占一个字节*/}if (countSize > length) {/**达到最大值*/int selEndIndex = Selection.getSelectionEnd(editable);str = editable.toString();String newStr = str.substring(0, i);mFilter.setText(newStr);editable = mFilter.getText();int newLen = editable.length();if (selEndIndex > newLen) {selEndIndex = editable.length();}Selection.setSelection(editable, selEndIndex);break;}}}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {String data = s.toString();}@Overridepublic void afterTextChanged(Editable s) {}}

————————–然后在要使用的Activity中如下操作——————————————————-

public class TestActivity extends Activity{

@Overrideprotected void onCreate(Bundle savedInstanceState) {setContentView(R.layout.activity_test);

EditText testEdt=findViewById(R.id.test_edt);

testEdt.addTextChangedListener(new ChineseOrEnglishTextWatcher(testEdt,100));//限制输入100个字符}

}

————————————上面自定义类中判断是否是中英文字符也可以用正则表达式判断———————————————

判断中文的正则表达式:

public static boolean isChineseChar(String inputString) {Pattern pattern = Pattern.compile("^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$");return pattern.matcher(inputString).matches();}

可以把上面:

for (i = 0; i < array.length; i++) {if ((char) (byte) array[i] != array[i])/**判断是否为中文*/{countSize += 2;/**如果为中文或者中文特殊符号则占两个字节*/} else {countSize += 1;/**英文则占一个字节*/}

换成:

if (isChineseChar(str.charAt(i) + "")) {count += 2;}if (filter.indexOf(str.charAt(i)) != -1) {count += 1;}

}

————–OVER—————-

销售世界上第一号的产品——不是汽车,

自定义TextWatcher:实现EditText输入字符限制

相关文章:

你感兴趣的文章:

标签云: