自定义编辑字段不稳定



我构建了自定义编辑字段,因为我想更改背景颜色。

第一、第二和第三显示不稳定,有时在对焦时显示,在失焦时消失。

我想要像第三张图像这样的结果,其中焦点也静态显示所有字段。

这是我Custom_EditField

public class Custom_EditField extends EditField {
private int width, row, color;
private boolean isfocus;
Custom_EditField(long style, int width, int row) {
    super(style);
    this.width = width;
    this.row = row;
}
public int getPreferredHeight() {
    return Font.getDefault().getHeight() * row;
}
public int getPreferredWidth() {
    return width;
}
protected void onFocus(int direction) {
    color = Color.GRAY;
    isfocus = true;
}
protected void onUnfocus() {
    color = Color.GOLD;
    isfocus = false;
}
protected void layout(int maxWidth, int maxHeight) {
    super.layout(maxWidth,
            Math.min(maxHeight, Font.getDefault().getHeight() * row));
    super.setExtent(maxWidth,
            Math.min(maxHeight, Font.getDefault().getHeight() * row));
}
protected void paint(Graphics graphics) {
    int rectHeight = getPreferredHeight();
    int rectWidth = getPreferredWidth();
    try {
        if (isfocus) {
            graphics.setBackgroundColor(color);
        } else {
            graphics.setBackgroundColor(color);
        }
        color = Color.BLACK;
        graphics.setColor(color);
        graphics.drawRect(0, 0, rectWidth, rectHeight);
        super.paint(graphics);
    } finally {
        graphics.setColor(color);
    }
}
}

我不是 100% 确定你在问哪个问题:

  • 如何为EditField绘制自己的焦点背景颜色,或
  • 如何解决移动焦点时字段消失的问题

1)如果是第二个问题(消失),那么我猜你遇到了与另一个问题相同的问题,Custom_TopField按钮消失了

因此,如果这些Custom_EditField对象是由扩展VerticalFieldManager的管理器创建的,但也实现了sublayout()自身来执行所有定位,那么请尝试我在另一个问题中建议的解决方案(不要扩展VerticalFieldManager,只是扩展Manager)。

2) 如果这不起作用,则可能是您的paint()方法在应该触发时没有被触发。 尝试在焦点方法中添加对invalidate()的调用,以及对超类方法的调用 onFocus()onUnfocus()

protected void onFocus(int direction) { 
    color = Color.GRAY; 
    isfocus = true; 
    invalidate();
    super.onFocus(direction);
} 
protected void onUnfocus() { 
    color = Color.GOLD; 
    isfocus = false; 
    invalidate();
    super.onUnfocus();
} 

3)而且,您可能还需要实现这一点:

public boolean isFocusable() {
    return true;
}

但是,首先,检查您的经理类,以确保这与你的另一个问题不是同一个问题。

也。。。

在此类中,编辑字段的高度基于行号。 这真的是你想要的吗? 第 0 行的大小为 0,之后的每一行都会变得越来越高。 这真的是用户界面吗? 通常,您会让所有行的编辑字段大小相同,只需使用不同的 y 偏移量对它们进行布局。 最有可能的是,这个类应该不需要知道它被放在哪个row上。 该信息通常是管理器对象的责任。

protected EditField getEditField() {
    EditField edit_field = new EditField("", "", 10, EditField.NO_NEWLINE
            | BasicEditField.FIELD_VCENTER) {

        protected boolean navigationClick(int status, int time) {
        }
        protected void onFocus(int direction) {
            Set the boolean during focus
        }
        protected void onUnfocus() {
        }
        protected void paintBackground(Graphics graphics_paint) {
            if(that boolean is true)
                  {
                       Set your custom background during focus.
                  }else{
                       Set your custom background during unfocus.
                  }
        }
        protected void paint(Graphics graphics_paint) {
            int old_color = graphics_paint.getColor();
            try {
                if(that boolean is true)
                  {
                       Set your custom Font color during any event like focus and click.
                  }else{
                       Set your custom background Font color during any event like unfocus.
                  }
                super.paint(graphics_paint);
            } finally {
                graphics_paint.setColor(old_color);
            }
        }
        public void layout(int width, int height) {
        }
    };

相关内容

  • 没有找到相关文章

最新更新