Android EditText输入中英文字数控制

本文描述了WLAN直连功能中设备重命名存在的BUG,即输入字符数量限制不合理的问题。当前设置允许最多输入30个中文或30个英文字符,而期望的设置是最多输入10个中文或32个英文字符。文中提供了源码中的具体位置及修改建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;  
        }  
    } 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值