Как установить фон поля в Blackberry 4.5? - PullRequest
0 голосов
/ 04 января 2012

Я определил BitmapButtonField в Blackberry. Но по умолчанию серый цвет фона не идет. И голубоватая граница фокуса? Как поменять их в ББ 4.5

enter image description here

Ответы [ 2 ]

2 голосов
/ 05 января 2012

Привет, это кнопка растрового изображения и цвет фона Красный

manager=new Field(Field.FOCUSABLE){
                protected void onFocus(int direction) {
                    super.onFocus(direction);
                    flag1=true;
                    invalidate();
                }
                protected void onUnfocus() {
                    flag1=false;
                    invalidate();

                }
                protected void layout(int width, int height) {
                    setExtent(image.getWidth(),image.getHeight());
                }
                protected void paint(Graphics graphics) {
                    if(flag1){
                        graphics.setBackgroundColor(Color.RED);
                        graphics.clear();
                        graphics.drawBitmap(0, 0, image.getWidth(),image.getHeight(), image_hover,0,0);
                    }else{
                        graphics.drawBitmap(0, 0, image.getWidth(),image.getHeight(), image,0,0);
                    }
                }
                protected boolean navigationClick(int status, int time) {
                    fieldChangeNotify(1);
                    return true;
                }
            };
            manager.setChangeListener(this);
            add(manager);

вывод как на следующем изображении enter image description here Это фоновое изображение и цвет фона по умолчанию

manager1=new Field(Field.FOCUSABLE){
                protected void onFocus(int direction) {
                    super.onFocus(direction);
                    flag2=true;
                    invalidate();
                }
                protected void onUnfocus() {
                    button=image;
                    flag2=false;
                    invalidate();

                }
                protected void layout(int width, int height) {
                    setExtent(image.getWidth(),image.getHeight());
                }
                protected void paint(Graphics graphics) {
                    if(flag2)
                        graphics.drawBitmap(0, 0, image.getWidth(),image.getHeight(), image_hover,0,0);
                        else
                        graphics.drawBitmap(0, 0, image.getWidth(),image.getHeight(), image,0,0);
                }
                protected boolean navigationClick(int status, int time) {
                    fieldChangeNotify(1);
                    return true;
                }
            };
            manager1.setChangeListener(this);
            add(manager1);

выводится следующим образом enter image description here

Для лучшего понимания следует полностью функциональный класс

import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.container.MainScreen;

public class StartUp extends UiApplication{
    public static void main(String[] args) {
        StartUp up=new StartUp();
        up.enterEventDispatcher();
    }
    public StartUp()
    {
        pushScreen(new Demoscreen());
    }
    class Demoscreen extends MainScreen implements FieldChangeListener
    {
        Bitmap image,image_hover;
        boolean flag1,flag2;
        Field manager=null,manager1=null;
        public Demoscreen() {
            image=Bitmap.getBitmapResource("Download_48x48.png");
            image_hover=Bitmap.getBitmapResource("Download_48x48.png");
            manager=new Field(Field.FOCUSABLE){
                protected void onFocus(int direction) {
                    super.onFocus(direction);
                    flag1=true;
                    invalidate();
                }
                protected void onUnfocus() {
                    flag1=false;
                    invalidate();

                }
                protected void layout(int width, int height) {
                    setExtent(image.getWidth(),image.getHeight());
                }
                protected void paint(Graphics graphics) {
                    if(flag1){
                        graphics.setBackgroundColor(Color.RED);
                        graphics.clear();
                        graphics.drawBitmap(0, 0, image.getWidth(),image.getHeight(), image_hover,0,0);
                    }else{
                        graphics.drawBitmap(0, 0, image.getWidth(),image.getHeight(), image,0,0);
                    }
                }
                protected boolean navigationClick(int status, int time) {
                    fieldChangeNotify(1);
                    return true;
                }
            };
            manager.setChangeListener(this);
            add(manager);
            manager1=new Field(Field.FOCUSABLE){
                protected void onFocus(int direction) {
                    super.onFocus(direction);
                    flag2=true;
                    invalidate();
                }
                protected void onUnfocus() {
                    flag2=false;
                    invalidate();
                }
                protected void layout(int width, int height) {
                    setExtent(image.getWidth(),image.getHeight());
                }
                protected void paint(Graphics graphics) {
                    if(flag2)
                        graphics.drawBitmap(0, 0, image.getWidth(),image.getHeight(), image_hover,0,0);
                        else
                        graphics.drawBitmap(0, 0, image.getWidth(),image.getHeight(), image,0,0);
                }
                protected boolean navigationClick(int status, int time) {
                    fieldChangeNotify(1);
                    return true;
                }
            };
            manager1.setChangeListener(this);
            add(manager1);
        }
        public void fieldChanged(Field field, int context) {
            if(field==manager)
            {
                displayDialog("I am first field");
            }else if(field==manager1)
            {
                displayDialog("I am second  field");
            }

        }
        public void displayDialog(final String message)
        {
            UiApplication.getUiApplication().invokeLater(new Runnable() {
                public void run() {
                    Dialog.inform(message);
                }
            });
        }
    }
}

Для получения более подробной информации, пожалуйста, перейдите по следующей ссылке для Фонов Фоновая логика для 4.5 ОС

1 голос
/ 05 января 2012

Проверьте следующие ссылки для настраиваемого поля кнопки:

Реализация расширенных кнопок, полей и менеджеров.

Пользовательские кнопки - создайте пользовательскую кнопку изизображение

Поле пользовательской кнопки Blackberry

Как создать поле пользовательской кнопки в Blackberry

Обычно переопределяетapplyTheme(..) (пустая реализация) удаляет стилизацию поля по умолчанию.Также нам нужно переопределить paint(..), paintBackground(..), drawFocus(..) и изменить их реализацию в соответствии с текущим состоянием фокуса поля.Ниже приведен фрагмент кода для случая, когда я расширяю Поле для создания поля пользовательских кнопок.

private final Bitmap focusedBitMap = Bitmap.getBitmapResource("focused.png");
private final Bitmap unfocusedBitmap = Bitmap.getBitmapResource("unfocused.png");

protected void paint(Graphics graphics) {
    // paint background
    graphics.setBackgroundColor(isFocus() ? Color.RED : Color.GREEN);
    graphics.clear();

    // draw button image
    Bitmap myBitmap = isFocus() ? focusedBitMap : unfocusedBitmap;
    if (myBitmap != null) {
        // image position calculation
        int imageX = 0;
        int imageY = 0;
        graphics.drawBitmap(imageX, imageY, 
            myBitmap.getWidth(), myBitmap.getHeight(), 
            myBitmap, 0, 0);
    }
}

protected void drawFocus(Graphics graphics, boolean on) {
}

public boolean isFocusable() {
    return true;
}
...