NumberKeyListenerpublic abstract class NumberKeyListener extends BaseKeyListener implements android.text.InputFilterFor 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. |
Methods Summary |
---|
public java.lang.CharSequence | filter(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 int | lookup(android.view.KeyEvent event, android.text.Spannable content)
return event.getMatch(getAcceptedChars(), getMetaState(content, event));
| protected static boolean | ok(char[] accept, char c)
for (int i = accept.length - 1; i >= 0; i--) {
if (accept[i] == c) {
return true;
}
}
return false;
| public boolean | onKeyDown(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);
|
|