在水平管理器的右侧显示图像

时间:2012-03-27 14:28:36

标签: blackberry

我正在尝试在水平管理器的右侧显示图像,该图像有2个labelfields,当我添加图像时,labelfield显示的数据为vainshed,只有图像显示在右侧。我使用的是自定义位图字段,如下所示:

   Public class screen{
  HorizontalFieldManager horizontalFieldManager_left1 = new HorizontalFieldManager() {
    protected boolean keyChar(char key, int status, int time) {
                Field field = getFieldWithFocus();
                Dialog.alert("here 1");
                return super.keyChar(key, status, time);
            }
        };
        final ImageButtonField alarmBitmapField = new ImageButtonField("",
                Field.FOCUSABLE, "ringtone.png", "ringtone.png", 0x9cbe95);
        System.out
                .println("width is ::" + alarmBitmapField.getPreferredWidth());
        alarmBitmapField.setMargin(0, 0, 0, Display.getWidth()
                - alarmBitmapField.getPreferredWidth());
        horizontalFieldManager_left1.add(alarmBitmapField);
        horizontalFieldManager_left1.add(time1);
        horizontalFieldManager_left1.add(min1);
        horizontalFieldManager_left1.add(new LabelField(" "));
        horizontalFieldManager_left1.add(desc1);

        vfm.add(horizontalFieldManager_left1);


}

自定义类

public class ImageButtonField extends Field {

        private String _label;
        private int _labelHeight;
        private int _labelWidth;
        private Font _font;

        private Bitmap _currentPicture;
        private Bitmap _onPicture;
        private Bitmap _offPicture;
        int color;

        public ImageButtonField(String text, long style, String img,
                String img_hvr, int color) {
            super(style);

            _offPicture = Bitmap.getBitmapResource(img);
            _onPicture = Bitmap.getBitmapResource(img_hvr);

            _font = getFont();
            _label = text;
            _labelHeight = _onPicture.getHeight();
            _labelWidth = _onPicture.getWidth();

            this.color = color;

            _currentPicture = _offPicture;
        }

        /**
         * @return The text on the button
         */
        String getText() {
            return _label;
        }

        /**
         * Field implementation.
         * 
         * @see net.rim.device.api.ui.Field#getPreferredHeight()
         */
        public int getPreferredHeight() {
            return _labelHeight;
        }

        /**
         * Field implementation.
         * 
         * @see net.rim.device.api.ui.Field#getPreferredWidth()
         */
        public int getPreferredWidth() {
            return _labelWidth;
        }

        /**
         * Field implementation. Changes the picture when focus is gained.
         * 
         * @see net.rim.device.api.ui.Field#onFocus(int)
         */
        protected void onFocus(int direction) {
            _currentPicture = _onPicture;
            invalidate();
        }

        /**
         * Field implementation. Changes picture back when focus is lost.
         * 
         * @see net.rim.device.api.ui.Field#onUnfocus()
         */
        protected void onUnfocus() {
            _currentPicture = _offPicture;
            invalidate();
        }

        /**
         * Field implementation.
         * 
         * @see net.rim.device.api.ui.Field#drawFocus(Graphics, boolean)
         */
        protected void drawFocus(Graphics graphics, boolean on) {
            // Do nothing
        }

        /**
         * Field implementation.
         * 
         * @see net.rim.device.api.ui.Field#layout(int, int)
         */
        protected void layout(int width, int height) {
            setExtent(Math.min(width, getPreferredWidth()),
                    Math.min(height, getPreferredHeight()));
        }

        /**
         * Field implementation.
         * 
         * @see net.rim.device.api.ui.Field#paint(Graphics)
         */
        protected void paint(Graphics graphics) {
            // First draw the background colour and picture
            graphics.setColor(this.color);
            graphics.fillRect(0, 0, getWidth(), getHeight());
            graphics.drawBitmap(0, 0, getWidth(), getHeight(), _currentPicture, 0,
                    0);

            // Then draw the text
            graphics.setColor(Color.BLACK);
            graphics.setFont(_font);
            graphics.drawText(
                    _label,
                    4,
                    2,
                    (int) (getStyle() & DrawStyle.ELLIPSIS | DrawStyle.HALIGN_MASK),
                    getWidth() - 6);
        }

        /**
         * Overridden so that the Event Dispatch thread can catch this event instead
         * of having it be caught here..
         * 
         * @see net.rim.device.api.ui.Field#navigationClick(int, int)
         */
        protected boolean navigationClick(int status, int time) {
            fieldChangeNotify(1);
            return true;
        }

    }

1 个答案:

答案 0 :(得分:1)

您可以使用GridFieldManager解决您的问题,如下所述: Search bar on top of the mainscreen blackberry

完整解释here