黑莓:AbsoluteFieldManager 不显示自定义字段

发布于 2024-11-07 05:19:25 字数 4106 浏览 2 评论 0原文

我正在尝试制作一个具有绝对布局的菜单,其中包含扩展字段的自定义项目。例如,此项目在 Horizo​​ntalFieldManager 中显示良好,但在 AbsoluteFieldManager 中它只显示空白屏幕。

到目前为止,这是我的代码:

/********************
 * CustomField.java *
 ********************/

import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Font;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.Keypad;

public class CustomField extends Field {
    Bitmap img;
    String s1, s2;
    Font font;
    int textColorUnfocused, textColorFocused, bgColorUnfocused, bgColorFocused;

    public CustomField(long style) {
        super(style);
    }

    public CustomField(Bitmap img, String s1, String s2) {// , long style) {
        // super(style);
        this.img = img;
        this.s1 = s1;
        this.s2 = s2;
        this.font = Font.getDefault();
        textColorUnfocused = 0x000000;
        textColorFocused = 0xffffff;
        bgColorUnfocused = 0xffffff;
        bgColorFocused = 0x3956F7;
    }

    protected void layout(int maxWidth, int maxHeight) {
        Font font = getFont();
        int width = img.getWidth() + 10;
        int height = img.getHeight() + (font.getHeight() * 3);
        setExtent(Math.min(width, maxWidth), Math.min(height, maxHeight));

    }

    protected void onFocus(int direction) {

        super.onFocus(direction);
        invalidate();
    }

    protected void onUnfocus() {
        super.onUnfocus();
        invalidate();
    }

    public boolean isFocusable() {
        return true;
    }

    protected void paint(Graphics g) {

        // Draw background
        g.setColor(isFocus() ? bgColorFocused : bgColorUnfocused);
        g.fillRect(0, 0, getWidth(), getHeight());
        // draw image
        g.drawBitmap(5, 5, img.getWidth(), img.getHeight(), img, 0, 0);

        g.setColor(isFocus() ? textColorFocused : textColorUnfocused);
        // draw text
        g.drawText(s1, ((img.getWidth() + 10) / 2) - (font.getAdvance(s1) / 2),
                img.getHeight() + font.getHeight());
        g.drawText(s2, ((img.getWidth() + 10) / 2) - (font.getAdvance(s2) / 2),
                img.getHeight() + (2 * font.getHeight()));

    }

    protected boolean keyChar(char character, int status, int time) {
        if (character == Keypad.KEY_ENTER) {
            fieldChangeNotify(0);
            return true;
        }
        return super.keyChar(character, status, time);
    }

    public int getY() {

        return img.getHeight() + (font.getHeight() * 3);
    }

    public int getX() {
        return img.getWidth();
    }

}    

 /**************
 * MyApp.java *
 **************/
import net.rim.device.api.ui.UiApplication;


public class MyApp extends UiApplication{
    public static void main(String args[]){

        MyApp theApp = new MyApp();       
        theApp.enterEventDispatcher();
    }
    public MyApp()
    {        
        // Push a screen onto the UI stack for rendering.
        pushScreen(new MyScreen());
    } 
}




/*****************
 * MyScreen.java *
 *****************/
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.container.AbsoluteFieldManager;
import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.container.MainScreen;

public class MyScreen extends MainScreen {
    public MyScreen() {
        AbsoluteFieldManager manager = new AbsoluteFieldManager();
        Bitmap img = Bitmap.getBitmapResource("1.png");
        CustomField cf1 = new CustomField(img, "an", "Item");
        CustomField cf2 = new CustomField(img, "another", "Item");
        manager.add(cf1, 10, 10);
        manager.add(cf2, 150, 150);
        //HorizontalFieldManager hfm = new HorizontalFieldManager(
            //  Manager.HORIZONTAL_SCROLL);
        //hfm.add(cf1); hfm.add(cf2);
        //add(hfm);
        add(manager);
    }

}

和图像 (1.png) http:// www7.pic-upload.de/14.05.11/rhr4jcfuy9f8.png

如何让绝对管理器显示我的自定义字段?

I'm trying to make a menu with an absolute layout that contains custom items extending Field. This items show well in the HorizontalFieldManager for example, but with the AbsoluteFieldManager it just shows a blank screen.

This is my code so far:

/********************
 * CustomField.java *
 ********************/

import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Font;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.Keypad;

public class CustomField extends Field {
    Bitmap img;
    String s1, s2;
    Font font;
    int textColorUnfocused, textColorFocused, bgColorUnfocused, bgColorFocused;

    public CustomField(long style) {
        super(style);
    }

    public CustomField(Bitmap img, String s1, String s2) {// , long style) {
        // super(style);
        this.img = img;
        this.s1 = s1;
        this.s2 = s2;
        this.font = Font.getDefault();
        textColorUnfocused = 0x000000;
        textColorFocused = 0xffffff;
        bgColorUnfocused = 0xffffff;
        bgColorFocused = 0x3956F7;
    }

    protected void layout(int maxWidth, int maxHeight) {
        Font font = getFont();
        int width = img.getWidth() + 10;
        int height = img.getHeight() + (font.getHeight() * 3);
        setExtent(Math.min(width, maxWidth), Math.min(height, maxHeight));

    }

    protected void onFocus(int direction) {

        super.onFocus(direction);
        invalidate();
    }

    protected void onUnfocus() {
        super.onUnfocus();
        invalidate();
    }

    public boolean isFocusable() {
        return true;
    }

    protected void paint(Graphics g) {

        // Draw background
        g.setColor(isFocus() ? bgColorFocused : bgColorUnfocused);
        g.fillRect(0, 0, getWidth(), getHeight());
        // draw image
        g.drawBitmap(5, 5, img.getWidth(), img.getHeight(), img, 0, 0);

        g.setColor(isFocus() ? textColorFocused : textColorUnfocused);
        // draw text
        g.drawText(s1, ((img.getWidth() + 10) / 2) - (font.getAdvance(s1) / 2),
                img.getHeight() + font.getHeight());
        g.drawText(s2, ((img.getWidth() + 10) / 2) - (font.getAdvance(s2) / 2),
                img.getHeight() + (2 * font.getHeight()));

    }

    protected boolean keyChar(char character, int status, int time) {
        if (character == Keypad.KEY_ENTER) {
            fieldChangeNotify(0);
            return true;
        }
        return super.keyChar(character, status, time);
    }

    public int getY() {

        return img.getHeight() + (font.getHeight() * 3);
    }

    public int getX() {
        return img.getWidth();
    }

}    

 /**************
 * MyApp.java *
 **************/
import net.rim.device.api.ui.UiApplication;


public class MyApp extends UiApplication{
    public static void main(String args[]){

        MyApp theApp = new MyApp();       
        theApp.enterEventDispatcher();
    }
    public MyApp()
    {        
        // Push a screen onto the UI stack for rendering.
        pushScreen(new MyScreen());
    } 
}




/*****************
 * MyScreen.java *
 *****************/
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.container.AbsoluteFieldManager;
import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.container.MainScreen;

public class MyScreen extends MainScreen {
    public MyScreen() {
        AbsoluteFieldManager manager = new AbsoluteFieldManager();
        Bitmap img = Bitmap.getBitmapResource("1.png");
        CustomField cf1 = new CustomField(img, "an", "Item");
        CustomField cf2 = new CustomField(img, "another", "Item");
        manager.add(cf1, 10, 10);
        manager.add(cf2, 150, 150);
        //HorizontalFieldManager hfm = new HorizontalFieldManager(
            //  Manager.HORIZONTAL_SCROLL);
        //hfm.add(cf1); hfm.add(cf2);
        //add(hfm);
        add(manager);
    }

}

And the image (1.png) http://www7.pic-upload.de/14.05.11/rhr4jcfuy9f8.png

How can I get the absolute manager to show my custom field?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无声静候 2024-11-14 05:19:25

我的猜测是,也许 AbsoluteFieldManager 正在将 0, 0 传递给自定义字段的 layout 方法。所以你的逻辑是调用 setExtent(0, 0)

My guess is that maybe AbsoluteFieldManager is passing 0, 0 to the layout method of your custom field. So your logic in there is calling setExtent(0, 0).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文