문제

높이를 낮추려고 노력 중 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);
    }
 }

제안해주세요.

감사해요

도움이 되었습니까?

해결책

두 번째 방법은 끔찍한 접근법입니다 (수직 필드 매너의 높이를 엉망으로 만들면 많은 문제가 발생합니다).

첫 번째 방법을 다시 시도하지만 이번에는 호출 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에서는 DateField의 높이가 항상 40픽셀이었습니다.9300에서는 처음 2개는 18, 세 번째는 15였습니다.

따라서 업데이트할 수 없는 값을 표시하기 위해 이 DateField를 사용하므로 대신 SimpleDateFormat과 같은 것을 사용하여 원하는 대로 날짜 형식을 지정하고 이를 LabelField에 표시하는 것이 좋습니다.그런 다음 지정한 글꼴을 사용하여 필드의 높이를 관리할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top