質問

aの高さを下げようとしています DateField デフォルト53から32までですが、役に立ちません。高さは同じままであり、その結果、テキストは背景の底に向かって切り取られているように見えますが、これは高さが小さくなります(32)。

私は2つの方法を試しました:

    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);
        }           
    };

2番目の方法(スタックオーバーフローポストに基づく):

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);
    }
 }

提案してください。

ありがとう

役に立ちましたか?

解決

2番目の方法は恐ろしいアプローチです(垂直フィールドマネージャーの高さをいじると、多くの問題が発生します)。

最初の方法をもう一度試してみてくださいが、今回は電話してください 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を作成し、必要な制限を提供します。

DateFieldは専門分野であり、私のテストでは、Conting Managerを介してこれを実行しようとするか、フィールドのレイアウトメソッドを直接実行しようとするかどうかに関係なく、それにかかった制限を無視します。それ自体が選択する実際の高さは、デバイスによって異なるようです。

すべてのタッチスクリーンの有能なデバイスでは、触れるのに十分な高さを与えようとすると思います。実際には、画像がそうする必要があるように、デバイスの解像度(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、3番目で15でした。

したがって、このデートフィールドを使用して更新不可の値を表示するだけなので、代わりにSimpledateFormatのようなものを使用して、必要に応じて日付をフォーマットし、Labelfieldに表示することをお勧めします。その後、指定したフォントを使用してフィールドの高さを管理できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top