Time InputFilter

  • 1 Antworten
  • Letztes Antwortdatum
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?

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;
	}
}
 
Niemand eine Idee?
 
Zurück
Oben Unten