Android中EditText中文英文长度控制
16lz
2021-01-26
如果将EditText的输入长度控制为N个字符,那有简单的两种方法:
1.在xml布局文件中对EditText添加android:maxLength="N";
<EditText android:id="@+id/et_test" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxLength="16" android:layout_centerInParent="true" />
2.也可以在代码中这样写
InputFilter[] filters = { new InputFilter.LengthFilter(16) };etTest.setFilters(filters);
这样做只能控制字符串长度,但项目中可能会遇到这样的需求,英文字母最多N个,而中文最多N/2个。这样的话直接用LengthFilter就无法实现了,但是我们可以通过自定义InputFilter实现:
package com.example.inputfilterdemo;import java.util.regex.Matcher;import java.util.regex.Pattern;import android.app.Activity;import android.os.Bundle;import android.text.Editable;import android.text.InputFilter;import android.text.Spanned;import android.text.TextWatcher;import android.util.Log;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;/** * * ClassName:MainActivity * * @author Jerome Song * @version * @since Ver 1.1 * @Date 2013 2013-4-4 下午2:55:42 * * @see */public class MainActivity extends Activity {private EditText etTest;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();}private void init() {etTest = (EditText) findViewById(R.id.et_test);InputFilter[] filters = { new NameLengthFilter(16) };etTest.setFilters(filters);}private class NameLengthFilter implements InputFilter {int MAX_EN;// 最大英文/数字长度 一个汉字算两个字母String regEx = "[\\u4e00-\\u9fa5]"; // unicode编码,判断是否为汉字public NameLengthFilter(int mAX_EN) {super();MAX_EN = mAX_EN;}@Overridepublic CharSequence filter(CharSequence source, int start, int end,Spanned dest, int dstart, int dend) {int destCount = dest.toString().length()+ getChineseCount(dest.toString());int sourceCount = source.toString().length()+ getChineseCount(source.toString());if (destCount + sourceCount > MAX_EN) {Toast.makeText(MainActivity.this, getString(R.string.count),Toast.LENGTH_SHORT).show();return "";} else {return source;}}private int getChineseCount(String str) {int count = 0;Pattern p = Pattern.compile(regEx);Matcher m = p.matcher(str);while (m.find()) {for (int i = 0; i <= m.groupCount(); i++) {count = count + 1;}}return count;}}}
demo源码就这样了,有更好的方法或者错的地方希望大家指出,共同进步!
更多相关文章
- make_ext4fs 文件权限控制
- Android(安卓)工具之androidscreencast
- android studio 更改 app 包名和包的长度
- android控制view的大小和位置(一)
- Android中的长度单位
- Android(安卓)Studio音乐播放器and视频播放器
- 输入框计数Demo
- 使用xml和java代码混合控制UI界面
- android ExpandableListActivity