T
Tom299
Stamm-User
- 122
Hi,
ich hab mir einen InputFilter geschrieben, der mir die Eingabe von Uhrzeiten erlaubt. Nach dem 2. Zeichen wird auch automatisch ein : gesetzt.
Soweit sogut, nur beim Löschen hab ich jetzt das Problem, daß ich nicht weiß, wie ich das : automatisch entfernen kann. Falls das überhaupt geht?
Bei der Eingabe setz ich nach dem 2. Zeichen einfach noch ein : an den String. Aber beim Löschen kann ich ja irgendwie nix "wegnehmen", nur wieder was dranhängen. Jemand eine Idee?
ich hab mir einen InputFilter geschrieben, der mir die Eingabe von Uhrzeiten erlaubt. Nach dem 2. Zeichen wird auch automatisch ein : gesetzt.
Soweit sogut, nur beim Löschen hab ich jetzt das Problem, daß ich nicht weiß, wie ich das : automatisch entfernen kann. Falls das überhaupt geht?
Bei der Eingabe setz ich nach dem 2. Zeichen einfach noch ein : an den String. Aber beim Löschen kann ich ja irgendwie nix "wegnehmen", nur wieder was dranhängen. Jemand eine Idee?
Code:
public class TimeFilter implements InputFilter {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
// zeichen gelöscht
if (source.length() == 0) {
// Log.e("Source: ", source.toString() + " start: " + start + " end: " + end);
// Log.e("Dest: ", dest.toString() + " dstart: " + dstart + " dend: " + dend);
if (dest.length() == dend) {
// if (dest.length() == 3) {
// return dest.subSequence(0, 2);
// }
return null;
}
else {
return "" + dest.charAt(dstart);
}
}
Log.e("Source: ", source.toString() + " start: " + start + " end: " + end);
Log.e("Dest: ", dest.toString() + " dstart: " + dstart + " dend: " + dend);
// Erlaubt nur 1 Zeichen
if (source.length() == 1) {
if (dest.length() == 0) {
// das 1. zeichen muß eine zahl sein
if (!Character.isDigit(source.charAt(start))) {
return "";
}
else {
Integer i = Integer.valueOf(source.charAt(start));
if (i >= 48 && i<=50) {
return null;
}
else {
return "";
}
}
}
if (dest.length() == 1) {
// das 2. zeichen muß eine zahl sein
// setze trennzeichen automatisch dahinter
if (!Character.isDigit(source.charAt(start))) {
return "";
}
else {
Integer i1 = Integer.valueOf(dest.charAt(0));
Integer i2 = Integer.valueOf(source.charAt(start));
if (i1 == 50) {
if (i2 >= 48 && i2<=51) {
return source.charAt(start) + ":";
}
else {
return "";
}
}
else {
return source.charAt(start) + ":";
}
}
}
if (dest.length() == 3) {
// das 4. zeichen muß eine zahl sein
if (!Character.isDigit(source.charAt(start))) {
return "";
}
else {
Integer i = Integer.valueOf(source.charAt(start));
if (i >= 48 && i<=53) {
return null;
}
else {
return "";
}
}
}
if (dest.length() == 4) {
// das 5. zeichen muß eine zahl sein
if (!Character.isDigit(source.charAt(start))) {
return "";
}
else {
return null;
}
}
}
return null;
}
}