您的位置:首页 > 移动开发 > Android开发

Android EditText输入中英文字数控制

2015-01-09 10:19 411 查看
BUG描述:

进入WLAN界面,选择菜单->WLAN直连->重命名设备->最多可以输入30个中文,30个英文

[期望]

中文最多10个,英文最多32个

查找文件在源码中的位置:

# find ./ -path './out' -prune -o -name '*strings.xml' -print0 |xargs -0 grep -n '重命名设备'

./packages/apps/Settings/res/values-zh-rCN/strings.xml:664: <string name="wifi_p2p_menu_rename" msgid="8448896306960060415">"重命名设备"</string>./packages/apps/Settings/res/values-zh-rCN/strings.xml:668: <string name="wifi_p2p_failed_rename_message" msgid="2562182284946936380">"无法重命名设备。"</string>

# find ./ -path './out' -prune -o -name '*.java' -print0 |xargs -0 grep -n 'wifi_p2p_menu_rename'

./packages/apps/Settings/src/com/android/settings/wifi/p2p/WifiP2pSettings.java:348: menu.add(Menu.NONE, MENU_ID_RENAME, 0,R.string.wifi_p2p_menu_rename)

./packages/apps/Settings/src/com/android/settings/wifi/p2p/WifiP2pSettings.java:475: .setTitle(R.string.wifi_p2p_menu_rename)

root@hy:~/code/HUIYUE92_LWT_2S_KK_20141122# find ./ -path './out' -prune -o -name '*.xml' -print0 |xargs -0 grep -n 'wifi_p2p_menu_rename'

调用方式:

etTest = (EditText) findViewById(R.id.et_ch_en);
InputFilter[] filters = { new NameLengthFilter(32,10) };
etTest.setFilters(filters);


示例代码(新建NameLengthFilter类):

private class NameLengthFilter implements InputFilter {
int MAX_EN;
int MAX_CN;
String regEx = "[\\u4e00-\\u9fa5]"; // unicode编码,判断是否为汉字

public NameLengthFilter(int mAX_EN, int mAX_CN) {
super();
MAX_EN = mAX_EN;
MAX_CN = mAX_CN;
}
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
                int cnDesCount = getChineseCount(dest.toString());//已经存在中文个数
int allDesCount = dest.toString().length();//已经存在所有字符个数
int cnSourceCount = getChineseCount(source.toString());//新加入中文个数
int allSourceCount = source.toString().length();//新加入所有字符个数

if (cnDesCount + cnSourceCount <= MAX_CN &&
enDesCount + enSourceCount <= MAX_EN) {
return source;
}else {
return "";
}
        }

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: