我想降低自动填充字段的高度。如何去做?
继承我的代码
HorizontalFieldManager hfm = new HorizontalFieldManager();
LabelField lbl = new LabelField(" Name: ");
final AutoCompleteField TextField1 = new AutoCompleteField(filterLst)
{
public int getPreferredWidth()
{
return Display.getWidth()/2;
}
public void sublayout(int maxWidth, int maxheight)
{
super.sublayout(getPreferredWidth(), getPreferredHeight());
setExtent(getPreferredWidth(), getPreferredHeight());
}
};
hfm.add(lbl);
hfm.add(TextField1);
add(hfm);
下图是它的外观。我希望它看起来与我用于其他标签的编辑区域大小相同。
这是我的editfield代码
//Add box next to field for containing input
HorizontalFieldManager hfm1 = new HorizontalFieldManager();
LabelField lbl1 = new LabelField(" Amount: ");
final EditField TextField2 = new EditField()
{
boolean _drawFocus = false;
protected void layout(int maxWidth, int maxHeight)
{
super.layout(Math.min(maxWidth, 300), Math.min(maxHeight, 30));
}
protected boolean keyChar(char ch, int status, int time)
{
if (CharacterUtilities.isDigit(ch) || (ch == Characters.BACKSPACE))
{
return super.keyChar(ch, status, time);
}
return true;
}
protected void drawFocus(Graphics graphics,boolean on)
{
_drawFocus = on;
super.drawFocus(graphics, on);
_drawFocus = false;
}
protected void paint(Graphics g)
{
if ( _drawFocus )
{
super.paint(g);
return;
}
g.clear();
g.drawRect(0,0, 50, 50);
int oldColor = g.getColor();
g.setColor(Color.WHITE);
g.fillRect(0, 0, this.getPreferredWidth(), this.getPreferredHeight());
g.setColor(oldColor);
g.drawRect(100, 100, 50, 50);
super.paint(g);
}
};
TextField2.setBorder(BorderFactory.createRoundedBorder(new XYEdges(6,6,6,6)));
hfm1.add(lbl1);
hfm1.add(TextField2);
add(hfm1);
我想将autocompletefield的大小用于其他字段的名称。请帮助。
由于
答案 0 :(得分:1)
可能导致您遇到麻烦的一件事是EditField
是人们通常认为的Field
。但是,AutoCompleteField
的处理方式更像是Manager
。当然,它希望成为Manager
,因为它(可能)包含EditField
,但之后还会包含另一个动态显示自动填充选项的子Field
。
(非经理)Field
和Manager
子类处理布局略有不同,所以我发现尝试使用普通getPreferredHeight()
和layout()
以及{ {1}}对我来说效果不佳。
所以,我所做的是双重的:
sublayout()
子类模仿默认AutoCompleteField
的装饰。这不完美。如果您希望它们看起来完全相同,则可能需要为两者编写自定义EditField
方法。你说问题只是想调整字段的大小,所以我觉得这很好。paint()
似乎包含一个子EditField(至少在逻辑上......我不确定它是否以这种方式实现),我决定尝试让EditField选择自己的大小,以与正常EditFields匹配的方式。为此,我通过在每个字段上设置相同的AutoCompleteField
来控制所有字段的高度。我对您的代码所做的更改:
Font
我删除了编辑字段中试图控制高度的 final int fontSize = 24; // pick whatever you like here
final int pad = 2;
final int margin = 2;
方法中的代码,因为......正如我所说,我没有成功设置自动完成字段的高度。我刚刚将您的编辑字段的layout()
更改为非常标准的实现:
layout()
然后,我在编辑字段上设置了填充,因为它看起来像 final EditField TextField2 = new EditField()
{
boolean _drawFocus = false;
protected void layout(int maxWidth, int maxHeight)
{
super.layout(getPreferredWidth(), getPreferredHeight());
}
使用2像素的填充(在5.0 Storm2上)。您可能不关心,对于此UI,但它似乎也有2像素的边距。
AutoCompleteField
然后,我为您的所有字段设置相同的字体。它不必是默认字体。只是让他们都一样。这一步似乎决定了 TextField2.setPadding(pad, pad, pad, pad);
TextField2.setMargin(margin, margin, margin, margin);
...设置字体所绘制的圆角矩形字段的可见大小。
AutoCompleteField
之后,编辑字段和自动填充字段应该是一致的高度。我在5.0 9550上对此进行了测试。由于垫和边距值是通过实验确定的,我完全可以相信这些值(例如2个像素)可能会在不同的设备上发生变化。你可能需要进行一些实验。