O segundo método é uma abordagem horrível (mexer com a altura do verticalfieldManager fará com que muitos problemas).
Experimente o primeiro método novamente, mas desta vez chamada super.layout
primeiro:
DateField dtf = new DateField(label, defaultDateTime, DateField.DATE_TIME | DrawStyle.LEFT | DrawStyle.TOP | Field.FOCUSABLE | Field.READONLY )
{
protected void layout(int width, int height) {
super.layout(width, height);
Bitmap bmp = UIElements.GetBitmap(UIElements.IMG_DROPDOWN_BG, true);
width = bmp.getWidth();
height = bmp.getHeight();
super.setExtent(width, height);
}
};
Observe que, usando essa abordagem, você também pode obter falhas, pois está substituindo cegamente um método sem considerar o restante da classe. Para fazer isso com segurança, você precisaria ter acesso à fonte da classe pai e não.
Eu sugiro estender HorizontalFieldManager
(sobrepor sublayout
) ter uma altura fixa (nunca VFM porque a rolagem segue na mesma direção que você está tentando fazer fixo). Em seguida, coloque dentro de um campo de data regular que usa toda a altura disponível (passe a bandeira Field.USE_ALL_HEIGHT
no construtor).
Mais informações:http://docs.blackberry.com/es-es/developers/deliverables/29251/determining_the_dimensions_of_a_field_1578864_11.jsp