FileDocCategorySizeDatePackage
NumberKeyListener.javaAPI DocAndroid 5.1 API4298Thu Mar 12 22:22:10 GMT 2015android.text.method

NumberKeyListener

public abstract class NumberKeyListener extends BaseKeyListener implements android.text.InputFilter
For numeric text entry

As for all implementations of {@link KeyListener}, this class is only concerned with hardware keyboards. Software input methods have no obligation to trigger the methods in this class.

(Omit source code)

Fields Summary
Constructors Summary
Methods Summary
public java.lang.CharSequencefilter(java.lang.CharSequence source, int start, int end, android.text.Spanned dest, int dstart, int dend)

        char[] accept = getAcceptedChars();
        boolean filter = false;

        int i;
        for (i = start; i < end; i++) {
            if (!ok(accept, source.charAt(i))) {
                break;
            }
        }

        if (i == end) {
            // It was all OK.
            return null;
        }

        if (end - start == 1) {
            // It was not OK, and there is only one char, so nothing remains.
            return "";
        }

        SpannableStringBuilder filtered =
            new SpannableStringBuilder(source, start, end);
        i -= start;
        end -= start;

        int len = end - start;
        // Only count down to i because the chars before that were all OK.
        for (int j = end - 1; j >= i; j--) {
            if (!ok(accept, source.charAt(j))) {
                filtered.delete(j, j + 1);
            }
        }

        return filtered;
    
protected abstract char[]getAcceptedChars()
You can say which characters you can accept.

protected intlookup(android.view.KeyEvent event, android.text.Spannable content)

        return event.getMatch(getAcceptedChars(), getMetaState(content, event));
    
protected static booleanok(char[] accept, char c)

        for (int i = accept.length - 1; i >= 0; i--) {
            if (accept[i] == c) {
                return true;
            }
        }

        return false;
    
public booleanonKeyDown(android.view.View view, android.text.Editable content, int keyCode, android.view.KeyEvent event)

        int selStart, selEnd;

        {
            int a = Selection.getSelectionStart(content);
            int b = Selection.getSelectionEnd(content);

            selStart = Math.min(a, b);
            selEnd = Math.max(a, b);
        }

        if (selStart < 0 || selEnd < 0) {
            selStart = selEnd = 0;
            Selection.setSelection(content, 0);
        }

        int i = event != null ? lookup(event, content) : 0;
        int repeatCount = event != null ? event.getRepeatCount() : 0;
        if (repeatCount == 0) {
            if (i != 0) {
                if (selStart != selEnd) {
                    Selection.setSelection(content, selEnd);
                }

                content.replace(selStart, selEnd, String.valueOf((char) i));

                adjustMetaAfterKeypress(content);
                return true;
            }
        } else if (i == '0" && repeatCount == 1) {
            // Pretty hackish, it replaces the 0 with the +

            if (selStart == selEnd && selEnd > 0 &&
                    content.charAt(selStart - 1) == '0") {
                content.replace(selStart - 1, selEnd, String.valueOf('+"));
                adjustMetaAfterKeypress(content);
                return true;
            }
        }

        adjustMetaAfterKeypress(content);
        return super.onKeyDown(view, content, keyCode, event);