Pregunta

Lo que trato de hacer es simplemente cambiar la altura de un campo de edición. Esto suena bastante fácil, pero enfrento un problema que me vuelve loco. Aquí está mi código:

public class CMainManager extends HorizontalFieldManager
{
    EditField mtxt=new EditField(EditField.FOCUSABLE | EditField.FILTER_DEFAULT);

    /* Constructeur */
    public CMainManager()
    {
        add(mtxt);
    }

     public int getPreferredHeight()
     {
          return Display.getHeight();
    }

    public int getPreferredWidth()
    {
          return Display.getWidth();
    }

    protected void sublayout(int width, int height)
    {
        layoutChild(mtxt, 50, 500);
        setPositionChild(mtxt, 0, 10);
        mtxt.setBackground(
                BackgroundFactory.createSolidBackground(0x000000FF));

        setExtent(width, height);
    }
}

La línea LayoutChild (MTXT, 50, 500); Debe establecer el ancho y la altura de mi campo de edición. Lo hace, pero solo con el ancho. La altura es constante. Si lo configuro en 500 obtengo el mismo resultado que si lo configuré en 10.

¿Alguna idea de lo que me estoy perdiendo? Porque estoy seguro de que este es un error estúpido que estoy haciendo ...

Gracias

== Editar

Después de la ayuda de JProffit, he entendido lo que hice mal. Sin embargo, ahora que funciona (puedo establecer la altura) tengo otro problema. Aquí estoy el código:

private EditField m_Txt=new EditField(EditField.FOCUSABLE |
                                        EditField.FILTER_DEFAULT) {
    protected void layout(int width, int height)
    {
        setExtent(Display.getWidth(), m_TxtHeight);
    }
    public boolean isFocusable()
    {
        return true;
    }

    protected void onFocus(int direction)
    {
        super.onFocus(direction);
        invalidate();
    }

    protected void onUnfocus() {
        super.onUnfocus();
        invalidate();
    }
};

Con este código no puedo administrar el enfoque correctamente. ¿Qué olvido? No puedo ver el cursor en mi campo.

Alguna idea ?

Gracias

¿Fue útil?

Solución

No le está diciendo las dimensiones que tomarán, está especificando la cantidad máxima de espacio que puede ocupar. Entonces, cuando lo diga 10, 50 o 500, si solo quiere usar una altura de 8, eso es todo lo que será. Tendrás que anular layout() En el campo de edición si desea controlar sus dimensiones también.

Otros consejos

Intente hacer así ... cree un campo de edición personalizado y dentro del método de diseño

_editField = new EditField("", initialValueOfTextField) 
    {
        protected void layout(int maxWidth, int maxHeight) 
        {
          int myWidth = getMaxSize() * getFont().getAdvance("W");// define your req width
          int myHeight= 50 // your required height
          super.layout(myWidth, myHeight);
       }
   };
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top