Android: Edittext.setfocusable(true) geht nicht mehr

Android Problem:

Hintergrund: Ihr habt ein EditText Steuerelement zur Laufzeit (im Programmcode) mit setFocusable (false) deaktiviert. Damit ist es zwar sichtbar, der Benutzer kann aber keine Eingaben machen. Auf setEnabled wolltet ihr verzichten, da dieses auch die Darstellung ändert.

Wenn ihr das Steuerelement jedoch wieder mit setFocusable aktiviert, funktioniert es nicht. Immer wenn der User den Cursor manuell ins Feld stellt, fliegt er wieder raus. So als ob das Feld weiterhin gesperrt wäre.

Lösung: 

Zum erneuten Aktivieren zur Laufzeit müsst ihr nun zwei Werte auf true setzen: setFocusable UND setFocusableInTouchMode! Unabhängig davon, dass man es vereinfachen könnte – richtig würde es dann so aussehen:

EditText et_time = findViewById(R.id.editTextUserTime);

if (_EditTimeDateFlag) { 
   //user may edit time
   et_time.setFocusableInTouchMode(true); 
   et_time.setFocusable(true); 
} 
else { 
   //time is locked
   et_time.setFocusable(false); 
}

Bei setFocusable(false) wird der InTouchMode automatisch deaktiviert! Bei true aber nicht automatisch wieder eingeschaltet! Derartiges gehört für mich in das Land der Kuriositäten. Aber ich kommentiere das nicht weiter. Ihr könnt nur haufenweise Debugging Zeit sparen, wenn ihr das beachtet!


Text und Entwurf. (c) AE SYSTEME Testcenter, Hans-J. Walter

Hans-J. Walter ist Programmierer von AE WWS Lite und für Anwendungen in Windows DOT.NET / C# und Java / Android Apps. Dazu ist er als Autor für journalistische Fachbeiträge über relevante Technik, Trends und Innovationen unterwegs. Kontakt: hjw@terminal-systems.de

Für diese und alle nachfolgenden Seiten gilt der obligatorische Hinweis: Alle Angaben ohne Gewähr. Bilder und Codes zeigen Beispiele. Beschreibungen beziehen sich auf aktuell bei uns vorliegenden Zustand und stellen keine Bewertung der verwendeten Techniken da. Fehler und Änderungen vorbehalten!

Beteilige dich an der Unterhaltung

1 Kommentar

  1. Sehr gut beschrieben. So sollten Informationen rübergebracht werden. Danke schön.

Schreibe einen Kommentar