Android中EditText禁止輸入表情

最近在做的項(xiàng)目中用戶編輯資料的時(shí)候不希望用戶輸入表情,如果用戶輸入表情的話上傳給后臺(tái)要報(bào)錯(cuò),所以需要我們前端做一個(gè)判斷。下面就來(lái)說(shuō)一下怎么在EditText中屏蔽表情吧。

  • 網(wǎng)上有很多這樣的列子但是一不小心就會(huì)掉進(jìn)坑里面,比如繼承EditText,重寫(xiě)addTextChangedListener()方法??赡墚?dāng)時(shí)你測(cè)試的時(shí)候沒(méi)有什么問(wèn)題,但是項(xiàng)目上線后就會(huì)有很多問(wèn)題,錯(cuò)誤率很高,但是查看友盟后臺(tái)的時(shí)候好像是截取字符串長(zhǎng)度方面的錯(cuò)誤。所以建議大家不要使用那個(gè)方法了。
  • 因?yàn)樯厦娴姆椒ú恍?,肯定要想其他的解決方案了。這里想到了通過(guò)過(guò)濾器來(lái)攔截用戶輸入的字符,可以避免截取字符串角標(biāo)越界的問(wèn)題。
InputFilter inputFilter= new InputFilter() {
        Pattern emoji = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",
                Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);

        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            Matcher emojiMatcher = emoji.matcher(source);
            if (emojiMatcher.find()) {
                //                    Toast.makeText(MainActivity.this,"不支持輸入表情", 0).show();
                MyToast.showText("不支持輸入表情");
                return "";
            }
            return null;
        }
    };

然后給editText設(shè)置filter,這里給editText設(shè)置了兩個(gè)filter第一個(gè)是屏蔽表情,第二個(gè)是設(shè)置用戶輸入多少字?jǐn)?shù)的限制

//給editText設(shè)置filter
edit_name.setFilters(new InputFilter[]{inputFilter,new InputFilter.LengthFilter(12)});
  • 當(dāng)然這里最后要提醒大家一點(diǎn)就是,這樣屏蔽的表情符號(hào)肯定還是不能夠百分之百的屏蔽完全的。所以最后我們只能選擇讓用戶填寫(xiě)英文,漢字,和數(shù)字了。下面是過(guò)濾的代碼
InputFilter inputFilter=new InputFilter() {

        Pattern pattern = Pattern.compile("[^a-zA-Z0-9\\u4E00-\\u9FA5_]");
        @Override
        public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
         Matcher matcher=  pattern.matcher(charSequence);
            if(!matcher.find()){
                return null;
            }else{
                MyToast.showText("只能輸入漢字,英文,數(shù)字");
                return "";
            }

        }
    };

ok,就是這么簡(jiǎn)單。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程,因...
    小菜c閱讀 7,334評(píng)論 0 17
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評(píng)論 19 139
  • 在開(kāi)發(fā)中可能多處會(huì)用到過(guò)濾Emoji表情符,一般情況下,我們會(huì)通過(guò)EditText的addTextChangedL...
    Mr_zhoujp閱讀 7,876評(píng)論 5 2
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,057評(píng)論 25 709
  • 班級(jí)理念:活到老,學(xué)到老,成長(zhǎng)自己,全心全意為孩子服務(wù)。打造書(shū)香門(mén)第,構(gòu)建幸福家庭! 座右銘1:有心,認(rèn)真,勤奮,...
    吳秀蘭分眾傳媒閱讀 457評(píng)論 0 0

友情鏈接更多精彩內(nèi)容