سؤال

What I try to do is to simply change the height of an EditField. This sounds pretty easy but I facing a problem that drives me crazy. Here is my code:

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);
    }
}

The line layoutChild(mtxt, 50, 500); should set the width and height of my EditField. It does, but only with the width. The height is constant. If I set it to 500 I get the same result as if I set it to 10.

Any idea of what I'm missing ? because I'm sure this is a stupid error I'm doing...

Thanks

==edit

After jproffit help, I've understood what I did wrong. However now that it works (I can set the height) I have another problem. Here is me code:

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();
    }
};

With this code I cannot manage the focus correctly. What do I forget ? I cannot see the cursor in my field.

Any idea ?

Thanks

هل كانت مفيدة؟

المحلول

You aren't telling it the dimensions to take, you're specifying the maximum amount of space it can take up. So when you tell it 10, 50, or 500, if it only want to use a height of 8 that's all it will be. You'll have to override layout() on the EditField if you want to control its dimensions as well.

نصائح أخرى

Try doing like this.. create a custom editfield and inside the layout method

_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);
       }
   };
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top