La deuxième méthode est une approche horrible (jouer avec la hauteur de VerticalFieldManager vous causera beaucoup de problèmes).
Essayez à nouveau la première méthode, mais cette fois appelez super.layout
première:
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);
}
};
Notez que l'utilisation de cette approche, vous pouvez également obtenir des problèmes, car vous remplacez aveuglément une méthode sans considérer le reste de la classe. Pour ce faire en toute sécurité, vous auriez besoin d'avoir accès à la source de classe parent, et vous ne le faites pas.
Je suggérerais d'étendre HorizontalFieldManager
(passer outre sublayout
) pour avoir une hauteur fixe (jamais VFM car le défilement va dans la même direction que vous essayez de faire fixe). Placez ensuite à l'intérieur d'un champ de date régulier qui utilise toute la hauteur disponible (passer le drapeau Field.USE_ALL_HEIGHT
dans le constructeur).
Plus d'informations:http://docs.blackberry.com/es-es/developers/deliverables/29251/determining_the_dimensions_of_a_field_1578864_11.jsp