试图降低 DateField 从默认为53到32,但无济于事。高度保持不变,其结果是在高度较小(32)的背景底部切出的文本被切开。

我尝试了两种方法:

    DateField dtf = new DateField(label, defaultDateTime, DateField.DATE_TIME | DrawStyle.LEFT | DrawStyle.TOP | Field.FOCUSABLE | Field.READONLY )
    {
        protected void layout(int width, int height)
        {
            Bitmap bmp = UIElements.GetBitmap(UIElements.IMG_DROPDOWN_BG, true);

            width = bmp.getWidth();
            height = bmp.getHeight();
            super.setExtent(width, height);

            super.layout(width, height);
        }           
    };

第二种方法(基于堆栈溢出帖子):

public class MyDateManager extends VerticalFieldManager {
    protected DateField dateField_ = null;
    public MyDateManager(String label, long defaultDateTime) {
        super(Manager.FIELD_HCENTER | Manager.FIELD_VCENTER);
        dateField_ = new DateField(label, defaultDateTime, DateField.DATE_TIME |
            Field.FIELD_HCENTER | DrawStyle.HCENTER | Field.FOCUSABLE | Field.READONLY);

        this.add(dateField_);
    }

    protected void sublayout(int width, int height) {
        Bitmap bmp = UIElements.GetBitmap(UIElements.IMG_DROPDOWN_BG, false);

        width = bmp.getWidth();
        height = bmp.getHeight();

        layoutChild(dateField_, width, height);
        dateField_.setBackground(BackgroundFactory.createBitmapBackground(bmp, 0, 0, Background.REPEAT_NONE));
        int h = dateField_.getHeight();
        setExtent(width, height);
    }
 }

请建议。

谢谢

有帮助吗?

解决方案

第二种方法是一种可怕的方法(与VerticalFieldManager的高度混乱会给您带来很多问题)。

再次尝试第一个方法,但是这次致电 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

其他提示

我怀疑这是您可能会放松的一场战斗。

我个人会从Labelfield创建一个类似DateField的样子,这将为您提供所需的限制。

DateField是一个专业领域,在我的测试中,无论您是尝试通过包含管理器还是直接在字段的布局方法中执行此操作,它都会忽略您对其的限制。似乎它将自己选择的实际高度会因设备而异。

我怀疑所有具有触摸屏的设备,它将试图给自己足够的高度触摸。就设备的分辨率(DPI)而言,如您的图像所应该,因为它在高分辨率设备上看起来会有所不同,例如9900到低分辨率设备,例如9300。

我怀疑在非电视屏幕设备上,它可能会遵循指定的字体尺寸。

我测试了以下代码:

    DateField dtf1 = new DateField("test1", System.currentTimeMillis(), DateField.DATE_TIME | DrawStyle.LEFT | DrawStyle.TOP | Field.FOCUSABLE | Field.READONLY ) {
        protected void layout(int width, int height) {
            super.layout(width, 32);
            System.out.println("height1: " + Integer.toString(this.getHeight()));
        }           
    };
    DateField dtf2 = new DateField("test2", System.currentTimeMillis(), DateField.DATE_TIME | DrawStyle.LEFT | DrawStyle.TOP | Field.FOCUSABLE ) {
        protected void layout(int width, int height) {
            super.layout(width, 32);
            System.out.println("height2: " + Integer.toString(this.getHeight()));
        }           
    };
    DateField dtf3 = new DateField("test3", System.currentTimeMillis(), DateField.DATE_TIME | DrawStyle.LEFT | DrawStyle.TOP | Field.FOCUSABLE ) {
        protected void layout(int width, int height) {
            super.layout(width, 32);
            System.out.println("height3: " + Integer.toString(this.getHeight()));
        }           
    };

...

        add(dtf1);
        add(dtf2);
        Font smallFont = this.getFont().derive(Font.PLAIN, 15);
        dtf3.setFont(smallFont);
        add(dtf3);

在9800年,日期菲尔德的高度总是40像素。在9300上,第三名是第2个和15。

因此,由于您正在使用此dateField只是为了显示不可更新的值,因此我建议您使用SimpleDateFormat之类的内容,以根据需要格式化日期,并将其显示在Labelfield中。然后,您可以使用指定的字体来管理字段的高度。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top