2016-09-09 2 views
0

Ich arbeite an benutzerdefinierten edittext und ich möchte den Filter einstellen, aber ich habe keine Ahnung, wie das zu erreichen.Wie setze ich Filter in benutzerdefiniertem Editiertext in Android?

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); 
    } 
} 

Bitte gehen Sie meinen Code durch und schlagen Sie mir eine Lösung vor.

Antwort

0

Setzen Sie den Code in den Konstruktor.

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

Nein, ich weiß, dass ich eine unabhängige Klasse erstellen möchte, die sich auf Editiertext erstreckt, und darin setze ichFilter ein. –

+0

danke super es hat funktioniert –

Verwandte Themen