blackberry: проблемы с получением фокуса поля, если другое поле закрашено по той же координате x - PullRequest
1 голос
/ 19 мая 2011

У меня есть AbsoluteFieldManager, который содержит несколько полей в горизонтальной строке, переключение фокуса работает нормально.Теперь мне нужно добавить еще одно поле в том же горизонтальном положении, что и левое поле выше.При этом я больше не могу фокусировать первое поле.Экран должен выглядеть следующим образом:

________________________
|  ____   ____   ____  |
| |_f1_| |_f2_| |_f3_| |
|  ____                |
| |_f4_|               | with f4 added here, f1 isn't focusable, once it has
|______________________| lost focus.

Если у вас есть идеи, как это исправить, я буду признателен.Вот мой код:

TestScreen:

import net.rim.device.api.system.Display;
import net.rim.device.api.ui.container.AbsoluteFieldManager;
import net.rim.device.api.ui.container.MainScreen;

public class TestScreen extends MainScreen {
    int screenY = Display.getWidth();
    int screenX = Display.getHeight();

    public TestScreen() {
        AbsoluteFieldManager manager = new AbsoluteFieldManager();
        TestField f1 = new TestField(50, 50, true);
        TestField f2 = new TestField(50, 50, true);
        TestField f3 = new TestField(50, 50, true);
        TestField f4 = new TestField(50, 50, true);
        TestField f5 = new TestField(50, 50, false);
        manager.add(f1, 0, 0);
        manager.add(f2, 60, 0);
        manager.add(f3, 120, 0);
        manager.add(f4, 180, 0);
        // this works fine: 
        // manager.add(f5, 1, 80);
        // this not:
        manager.add(f5, 0, 80);
        add(manager);
    }
}

TestField:

import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Graphics;


public class TestField extends Field {
    boolean isFocusable;
    int width, height;
    int bgColorUnfocused, bgColorFocused;
    public TestField(int width, int height, boolean isFocusable){
        this.width=width;
        this.height=height;
        this.isFocusable=isFocusable;
        bgColorUnfocused= 0xC0C0C0;
        bgColorFocused = 0x3956F7;
    }
    protected void layout(int w, int h) {
        setExtent(width, height);
    }
    public boolean isFocusable() {
        return isFocusable;
    }
    protected void paint(Graphics g) {
        g.setColor(isFocus() ? bgColorFocused : bgColorUnfocused);
        g.fillRect(0, 0, width, height);        
    }

}

TestApp:

import net.rim.device.api.ui.UiApplication;


public class TestApp extends UiApplication{
    TestScreen screen = new TestScreen();
    public static void main(String args[]){
        TestApp app = new TestApp();
        app.enterEventDispatcher();
    }
    public TestApp(){
        pushScreen(screen);
    }
}

1 Ответ

3 голосов
/ 19 мая 2011

Поскольку AbsoluteFieldManager не совсем уверен, куда вы помещаете элементы, он не знает, в каком порядке отправлять фокус при использовании колесика.Если вы хотите управлять этим, ovveride nextFocus(int, int) из AFM, чтобы вы могли указать, кто получает фокус на основе того, где он находится и где предполагаемое движение.

Для получения более подробной информации смотрите http://www.blackberry.com/developers/docs/5.0.0api/net/rim/device/api/ui/Manager.html#nextFocus(int,%20int).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...