2015-09-25 31 views
2

我需要保护在我的应用程序中输入西里尔文本。如何检测编辑文本中的西里尔文字?

是否有某种方法可以检测editText中输入符号的哪种编码?

+0

你可以检查键盘的语言 – Blackbelt

+0

在这里我必须把它?在textWatcher里面或者在哪里? –

+0

请详细解释你的用例。根据您的使用情况,您可以使用[this](http://stackoverflow.com/a/30631069/1529129)或者有一个正则表达式,可以使用文本查看器进行检查。 –

回答

1

解决方案:

您需要在您的EditText适用InputFilter

例子:在您EditText

etNonCyrillic = (EditText) findViewById(R.id.etNonCyrillic); 
etNonCyrillic .setFilters(new InputFilter[]{cyrillicFilter}); 

实施cyrillicFilter

设置过滤器:

public static InputFilter cyrillicFilter = new InputFilter() { 
    @Override 
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 
     boolean keepOriginal = true; 
     StringBuilder sb = new StringBuilder(end - start); 
     for (int i = start; i < end; i++) { 
      char c = source.charAt(i); 
      if (!isCyrillicCharacter(c)) 
      { 
       sb.append(c); 
      } 
      else 
      { 
       keepOriginal = false; 
      } 
     } 
     if (keepOriginal) 
      return null; 
     else { 
      if (source instanceof Spanned) { 
       SpannableString sp = new SpannableString(sb); 
       TextUtils.copySpansFrom((Spanned) source, start, sb.length(), null, sp, 0); 
       return sp; 
      } else { 
       return sb; 
      }   
     } 
    } 

    @SuppressLint("NewApi") 
    private boolean isCyrillicCharacter(char c) 
    { 
     boolean isPriorToKitkat = android.os.Build.VERSION.SDK_INT<19; 
     UnicodeBlock block = UnicodeBlock.of(c); 
     boolean isCyrillicCharacter = (block.equals(UnicodeBlock.CYRILLIC) || block.equals(UnicodeBlock.CYRILLIC_SUPPLEMENTARY) || (isPriorToKitkat?false:(block.equals(UnicodeBlock.CYRILLIC_EXTENDED_A) || block.equals(UnicodeBlock.CYRILLIC_EXTENDED_B)))); 
     return isCyrillicCharacter; 
    } 
};