Editext禁止输入Emoji表情

来源:互联网 发布:淘宝店铺设计公司 编辑:程序博客网 时间:2024/03/19 14:34

Editext禁止输入Emoji表情

直接内部类使用用一个监听搞定

package com.warden.snsemoji;  import android.os.Bundle;  import android.support.v7.app.AppCompatActivity;  import android.text.Editable;  import android.text.TextWatcher;  import android.util.Log;  import android.widget.EditText;  import android.widget.Toast;  public class MainActivity extends AppCompatActivity  {      private static final String TAG = "warden";      private EditText mainEt;      @Override      protected void onCreate(Bundle savedInstanceState)      {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);          mainEt = (EditText) findViewById(R.id.main_et);          mainEt.addTextChangedListener(new TextChange(mainEt));      }      private class TextChange implements TextWatcher      {          private EditText et;          public TextChange(EditText et)          {              this.et = et;          }          @Override          public void beforeTextChanged(CharSequence s, int start, int count, int after)          {              // i("s:" + s);          }          @Override          public void onTextChanged(CharSequence s, int start, int before, int count)          {              // e("s:" + s + "  start:" + start + " before:" + before + " count:" + count);              //输入的类容              CharSequence input = s.subSequence(start, start + count);              //e("输入信息:" + input);              // 退格              if (count == 0) return;              //如果 输入的类容包含有Emoji              if (isEmojiCharacter(input))              {                  show("not input emoji");                  //那么就去掉                  et.setText(removeEmoji(s));              }              //如果输入的字符超过最大限制,超出的部分 砍掉~              if (s.length() > 3)              {                  show("超过输入的最大限制");                  et.setText(s.subSequence(0, start));              }              //最后光标移动到最后 TODO 这里可能会有更好的解决方案              et.setSelection(et.getText().toString().length());          }          @Override          public void afterTextChanged(Editable s)          {              // d("s:" + s);          }      }      /**      * 去除字符串中的Emoji表情      * @param source      * @return      */      private String removeEmoji(CharSequence source)      {          String result = "";          for (int i = 0; i < source.length(); i++)          {              char c = source.charAt(i);              if (isEmojiCharacter(c))              {                  continue;              }              result += c;          }          return result;      }      /**      * 判断一个字符串中是否包含有Emoji表情      * @param input      * @return true 有Emoji      */      private boolean isEmojiCharacter(CharSequence input)      {          for (int i = 0; i < input.length(); i++)          {              if (isEmojiCharacter(input.charAt(i)))              {                  return true;              }          }          return false;      }      /**      * 是否是Emoji 表情,抄的那哥们的代码      *      * @param codePoint      * @return true 是Emoji表情      */      public static boolean isEmojiCharacter(char codePoint)      {          // Emoji 范围          boolean isScopeOf = (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD)                  || ((codePoint >= 0x20) && (codePoint <= 0xD7FF) && (codePoint != 0x263a))                  || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))                  || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));          return !isScopeOf;      }      private void show(String msg)      {          Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();      }      void e(String msg)      {          Log.e(TAG, msg);      }      void i(String msg)      {          Log.i(TAG, msg);      }      void d(String msg)      {          Log.d(TAG, msg);      }  }  
0 0
原创粉丝点击