Marcando el Foco en textos de entrada bajo Flash Lite 2.x
30 11 2006Quítame ese focus!
En el ultimo desarrollo que hemos llevado a cabo en [Q] bajo Flash Lite 2, teníamos unos cuantos módulos que hacían un trabajo intenso con entradas de texto. Uno de los problemas más claros que nos encontramos es la nula representación del foco en estos elementos (ni un cursor de texto parpadeando, ni una ayuda visual que no sea el _focusrect que evidentemente se elimina en aplicaciones comerciales por cuestiones esteticas... XD ).
Si bien el componente que se ha expuesto en este blog soluciona en parte este problema, tiene algunas carencias que lo hacen poco práctico, como el hecho de perder la capacidad de la escritura intuitiva. (T9). Como queríamos conservar esa funcionalidad, hemos creado la siguiente clase (pobremente implementada... se adminten sugerencias) para poder destacar el foco en todos nuestros campos de texto de entrada sin tener que trabajar directamente sobre ninguno de ellos ni tener que conservar el foco por defecto de Flash.
La clase
-
class AutoFoco
-
{
-
private var autoFocoTextos:Object;
-
-
public function AutoFoco()
-
{
-
}
-
-
public function activarControlFoco():Void
-
{
-
autoFocoTextos = new Object();
-
autoFocoTextos.ref = this;
-
autoFocoTextos.onSetFocus = function(oldFocus,newFocus)
-
{
-
if (oldFocus instanceof TextField)
-
{
-
oldFocus.border = false;
-
oldFocus.background = false;
-
}
-
if (newFocus instanceof TextField)
-
{
-
newFocus.border = true;
-
newFocus.background = true;
-
newFocus.borderColor = 0xcc0000;
-
newFocus.backgroundColor = 0xEEEEEE;
-
}
-
}
-
Selection.addListener(autoFocoTextos);
-
}
-
-
public function desactivarControlFoco():Void
-
{
-
Selection.removeListener(autoFocoTextos);
-
delete autoFocoTextos.onSetFocus;
-
autoFocoTextos = null;
-
}
-
}
La clase dispone de solo dos metodos, uno para activar su funcionamiento y otro para desactivarlo. Un ejemplo de su uso podria ser el siguiente:
-
_focusrect = false;
-
var controler:AutoFoco = new AutoFoco();
-
controler.activarControlFoco();
-
Selection.setFocus(entrada_0);
Suponiendo que en el escenario tenemos 3 campos de entrada con nombres de instancia entrada_0, entrada_1 y entrada_2.
Esperamos que os sea de utilidad!







Está muy bien la clase, lo que quizá se podría mirar de hacer es pasarle un parámetro type que nos indicase si es un campo de texto o no y entonces añadirle un clip de un cursor parpadeando a la caja de texto, para así enseñarle al usuario que es una caja de texto input.
Creo que sería bastante fácil de implementar además.
Un saludo!
La idea de elecash no es mala, pero tiene el problema de que en algunos cells donde he probado (No han sido muchos, pero son mainstream) el sólo hecho de dejar una animación continua estatica corriendo en la pantalla ralentiza la entrada de datos a la aplicación.
Estoy seguro que depende del modelo y la versión de Flash Lite, pero en “mis tiempos” era un problema recurrente la optimización de recursos en un lenguaje tan interpretado como Flash.
También lo habia pensado pero efectivamente sería un aumento del uso de recursos de cpu. Haré alguna prueba y si sale algo curioso, posteare la mejora