Второй метод - это ужасный подход (возившаяся с высотой VerticalfieldFieldManager, вы получите много проблем).
Попробуйте первый метод еще раз, но на этот раз звоните super.layout
первый:
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);
}
};
Обратите внимание, что использование этого подхода вы также можете получить глюки, так как вы слепо переоцениваете метод, не рассматривая остальную часть класса. Чтобы сделать это безопасно, вам понадобится доступ к источнику родительского класса, а вы этого не сделаете.
Я бы посоветовал продлить HorizontalFieldManager
(переопределить sublayout
) иметь фиксированную высоту (никогда не VFM, потому что прокрутка идет в том же направлении, в котором вы пытаетесь сделать фиксированным). Затем поместите в поле обычного даты, которое использует всю доступную высоту (пропустите флаг Field.USE_ALL_HEIGHT
в конструкторе).
Больше информации:http://docs.blackberry.com/es-es/developers/deliverables/29251/determining_the_dimensions_of_a_field_1578864_11.jsp