过滤输入法的表情详解手机开发

所以为了防止用户胡乱输入表情、同时限制用户只能输入应用自带的表情。编写了一个自定义控件来禁止输入的表情。

代码如下:

  1. package com.qd.widget;  
  2.   
  3. import android.content.Context;  
  4. import android.text.InputFilter;  
  5. import android.text.SpannableString;  
  6. import android.text.Spanned;  
  7. import android.text.TextUtils;  
  8. import android.util.AttributeSet;  
  9. import android.widget.EditText;  
  10.   
  11. /** 
  12.  * 过滤搜狗输入法或其他输入法 当中的图片或其他非法字符 
  13.  *  
  14.  * 暂时仅过滤了部分常用的表情字符 
  15.  *  
  16.  * @author QD 
  17.  *  
  18.  */  
  19.   
  20. public class MyEditText extends EditText {  
  21.   
  22.     int maxLength = –1;  
  23.   
  24.     public MyEditText(Context context, AttributeSet attrs, int defStyle) {  
  25.         super(context, attrs, defStyle);  
  26.         addListener(attrs);  
  27.     }  
  28.   
  29.     public MyEditText(Context context, AttributeSet attrs) {  
  30.         super(context, attrs);  
  31.         addListener(attrs);  
  32.     }  
  33.   
  34.     public MyEditText(Context context) {  
  35.         super(context);  
  36.         addListener(null);  
  37.     }  
  38.   
  39.     private void addListener(AttributeSet attrs) {  
  40.         if (attrs != null)  
  41.             maxLength = attrs.getAttributeIntValue(“http://schemas.android.com/apk/res/android”“maxLength”, –1);  
  42.         // 过滤输入法表情  
  43.         InputFilter filter = new InputFilter() {  
  44.             @Override  
  45.             public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {  
  46.                 StringBuffer buffer = new StringBuffer();  
  47.                 for (int i = start; i < end; i++) {  
  48.                     char c = source.charAt(i);  
  49.                     // 第一个字符为以下时,过滤掉  
  50.                     if (c == 55356 || c == 55357 || c == 10060 || c == 9749 || c == 9917 || c == 10067 || c == 10024  
  51.                             || c == 11088 || c == 9889 || c == 9729 || c == 11093 || c == 9924) {  
  52.                         i++;  
  53.                         continue;  
  54.                     } else {  
  55.                         buffer.append(c);  
  56.                     }  
  57.                 }  
  58.                 if (source instanceof Spanned) {  
  59.                     SpannableString sp = new SpannableString(buffer);  
  60.                     TextUtils.copySpansFrom((Spanned) source, start, end, null, sp, 0);  
  61.                     return sp;  
  62.                 } else {  
  63.                     return buffer;  
  64.                 }  
  65.             }  
  66.         };  
  67.         // 输入框长度限制  
  68.         if (maxLength > 0)  
  69.             setFilters(new InputFilter[] { filter, new InputFilter.LengthFilter(maxLength) });  
  70.         else  
  71.             setFilters(new InputFilter[] { filter });  
  72.     }  

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/app/5810.html

(0)
上一篇 2021年7月17日 00:19
下一篇 2021年7月17日 00:19

相关推荐

发表回复

登录后才能评论