我正在开发一个应用程序,我需要在HorizontalFieldManage
中设置两个按钮。其中一个Bitmap
应保持不变,另一个LabelField
应保持水平居中。在这里,我已经尝试了很多次,但是无法在左侧设置Bitmap
,所以请你帮我解决这个问题。
这是我的代码::
VerticalFieldManager VFM = new VerticalFieldManager(USE_ALL_WIDTH){
public void paint(Graphics g) {
g.setBackgroundColor(Color.WHITE);
g.clear();
super.paint(g);
}
};
HorizontalFieldManager HFM = new HorizontalFieldManager(FIELD_HCENTER){
public void paint(Graphics g) {
g.setBackgroundColor(Color.WHITE);
g.clear();
super.paint(g);
}
};
Bitmap logom1;
logom1 = Bitmap.getBitmapResource("logo48X48.png");
BitmapField imgField = new BitmapField(logom1,Field.FIELD_LEFT);
LabelField RegistrationLbl = new LabelField("Registration",FIELD_HCENTER | FIELD_BOTTOM);
FontFamily fontFamily[] = FontFamily.getFontFamilies();
Font font = fontFamily[1].getFont(FontFamily.CBTF_FONT, 20);
font = fontFamily[1].getFont(Font.BOLD, 25);
RegistrationLbl.setFont(font);
HFM.add(imgField);
HFM.add(RegistrationLbl);
VFM.add(HFM);
add(VFM);
答案 0 :(得分:3)
Signare的一般解决方案可行,但左边距不太合适。在将标签添加到HFM
对象之前,您需要添加的唯一调用是这些(为清晰起见,分为两行):
int labelX = (Display.getWidth() - RegistrationLbl.getPreferredWidth()) / 2;
RegistrationLbl.setMargin(0, 0, 0, labelX - imgField.getPreferredWidth());
这假定它所在的类(Manager
)占据整个屏幕宽度(Display.getWidth()
)。
Read this for a good description of what margin is
另外,请注意setMargin()
在6.0之前的API中未记录,但我相信它实际上可用(但未记录)回到OS 4.5左右。
编辑顺便说一下,您正在分配font
对象,然后立即将其分配给其他对象。这看起来也不正确,虽然它不会影响标签中心的问题。
另一个编辑:,如Rupak的评论所示,此代码仅在您有固定的方向显示时才有效。如果标签应该在设备方向更改上再次居中,那么您需要更多。如果需要,请添加更多澄清问题,有人会帮忙!
答案 1 :(得分:0)
试试这个(这不是正确的方法) -
HorizontalFieldManager VFM = new HorizontalFieldManager(){
public void paint(Graphics g) {
g.setBackgroundColor(Color.WHITE);
g.clear();
super.paint(g);
}
};
HorizontalFieldManager LogoHFM = new HorizontalFieldManager(FIELD_LEFT);
Bitmap logom1;
logom1 = Bitmap.getBitmapResource("logo48X48.png");
BitmapField imgField = new BitmapField(logom1);
LogoHFM.add(imgField);
LabelField RegistrationLbl = new LabelField("Registration",FIELD_HCENTER);
FontFamily fontFamily[] = FontFamily.getFontFamilies();
Font font = fontFamily[1].getFont(FontFamily.CBTF_FONT, 20);
font = fontFamily[1].getFont(Font.BOLD, 25);
RegistrationLbl.setFont(font);
RegistrationLbl.setMargin(0,0,0,(Display.getWidth()-logom1.getWidth())/4);
VFM.add(LogoHFM);
VFM.add(RegistrationLbl);
add(VFM);