Die zweite Methode ist ein schrecklicher Ansatz (durch die Größe von VerticalfieldManager wird Ihnen viele Probleme ausgelöst).
Versuchen Sie die erste Methode erneut, aber diesmal rufen Sie an super.layout
Erste:
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);
}
};
Beachten Sie, dass Sie mit diesem Ansatz auch Störungen erhalten, da Sie eine Methode blind überschreiben, ohne den Rest der Klasse zu berücksichtigen. Um dies sicher zu tun, müssen Sie Zugriff auf die Quelle der Elternklasse haben, und Sie tun es nicht.
Ich würde vorschlagen, sich zu verlängern HorizontalFieldManager
(Überschreiben sublayout
) eine feste Höhe haben (niemals VFM, da das Scrollen in die gleiche Richtung geht, die Sie reparieren möchten). Platzieren Sie dann in ein reguläres Datumsfeld, das die gesamte verfügbare Höhe verwendet (übergeben Sie das Flag Field.USE_ALL_HEIGHT
im Konstruktor).