El segundo método es un enfoque horrible (jugar con la altura de VerticalFieldManager te dará muchos problemas).
Pruebe el primer método nuevamente, pero esta vez llame super.layout
primero:
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);
}
};
Tenga en cuenta que, utilizando este enfoque, también puede obtener fallas, ya que está anulando a ciegas un método sin considerar el resto de la clase. Para hacer esto de manera segura, necesitaría tener acceso a la fuente de clase principal, y no lo hace.
Sugeriría extender HorizontalFieldManager
(anular sublayout
) tener una altura fija (nunca VFM porque el desplazamiento va en la misma dirección que está tratando de arreglar). Luego coloque dentro de un campo de fecha regular que use toda la altura disponible (pase la bandera Field.USE_ALL_HEIGHT
en el constructor).
Más información:http://docs.blackberry.com/es-es/developers/deliverables/29251/determining_the_dimensions_of_a_field_1578864_11.jsp