2016-09-09 10 views
0

私はカスタムedittextに取り組んでいます。フィルターを設定したいのですが、それを達成する方法がわかりません。アンドロイドのカスタムEdittextのフィルタを設定するには?

public class CharacterEdittext extends EditText { 

    public static final String blockCharacterSet = "~#^|$%&*!`.%$-+()@/*1234567890_\":;?={}[]\\%<>£™¢∞§¶•ªº–≠œ∑´†¥¨ˆπ“‘«å∂ƒ©˙∆˚¬…æΩç√∫˜µ≤≥µ,÷≠`«'°®⨯€c/o"; 

public CharacterEdittext(android.content.Context context) { 
    super(context); 
} 

public CharacterEdittext(android.content.Context context, android.util.AttributeSet attrs) { 
    super(context, attrs); 
} 

public CharacterEdittext(android.content.Context context, android.util.AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
} 

public static android.text.InputFilter characterfilter = new android.text.InputFilter() { 
    @Override 
    public CharSequence filter(CharSequence source, int start, int end, android.text.Spanned dest, int dstart, int dend) { 

     if (source != null && blockCharacterSet.contains(("" + source))) { 
      return ""; 
     } 
     return null; 
    } 
}; 

    @Override 
    public void setFilters(android.text.InputFilter[] filters) { 
    super.setFilters(filters); 
    } 
} 

親切にも私のコードを見て、解決策を提案してください。

答えて

0

コンストラクタにコードを挿入します。

InputFilter filter = 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 (isCharAllowed(c)) // put your condition here 
       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; 
      }   
     } 
    } 

    private boolean isCharAllowed(char c) { 
     return blockCharacterSet.indexOf(c) >= 0; 
    } 
} 
setFilters(new InputFilter[] { filter }); 
+0

私はこれを知っていません。私はEdittextに拡張される独立したクラスを作りたいと思いますし、内部ではsetFiltersを使用します。 –

+0

ありがとうございました –

関連する問題