User interface BlackBerry-以编程方式显示键入模式指示器

User interface BlackBerry-以编程方式显示键入模式指示器,user-interface,blackberry,input,keyboard,User Interface,Blackberry,Input,Keyboard,你知道一些在屏幕上显示不同内容的编程方法吗? 我知道我可以简单地绘制位图,但我想在任何RIM操作系统版本中都可以这样做。 另外,在4.2.1中有一个函数,但在4.3中它已经被弃用了 任何建议都会有帮助,谢谢 由于没有其他选择,我用以下内容制作了一个样本: 自定义标题字段类别代码: class TITitleField extends Field implements DrawStyle { static final boolean mIsDimTheme = Integer.pars

你知道一些在屏幕上显示不同内容的编程方法吗?
我知道我可以简单地绘制位图,但我想在任何RIM操作系统版本中都可以这样做。
另外,在4.2.1中有一个函数,但在4.3中它已经被弃用了


任何建议都会有帮助,谢谢

由于没有其他选择,我用以下内容制作了一个样本:

自定义标题字段类别代码:

class TITitleField extends Field implements DrawStyle {
    static final boolean mIsDimTheme = Integer.parseInt(DeviceInfo
            .getDeviceName().substring(0, 4)) < 8900;
    static final Bitmap ALT = Bitmap.getBitmapResource(mIsDimTheme ? 
            "typ_ind_alt_mode_Gen_Zen_328560_11.jpg" : 
            "typ_ind_alt_mode_Precsn_Zen_392908_11.jpg");
    static final Bitmap MULTITAP = Bitmap.getBitmapResource(mIsDimTheme ?
    "typ_ind_mltap_mode_Gen_Zen_328975_11.jpg" : 
    "typ_ind_mutlitap_mode_Precsn_Zen_452907_11.jpg");
    static final Bitmap NUMLOCK = Bitmap
        .getBitmapResource(mIsDimTheme ? 
            "typ_ind_num_lock_Gen_Zen_328568_11.jpg" : 
            "typ_ind_num_lock_Precsn_Zen_392925_11.jpg");
    static final Bitmap SHIFT = Bitmap.getBitmapResource(mIsDimTheme ? 
            "typ_ind_shift_mode_Gen_Zen_328574_11.jpg" : 
            "typ_ind_shift_mode_Precsn_Zen_392931_11.jpg");

    public static final int MODE_NONE = 0;
    public static final int MODE_ALT = 1;
    public static final int MODE_MULTITAP = 2;
    public static final int MODE_NUMLOCK = 3;
    public static final int MODE_SHIFT = 4;

    public void setTypingIndicatorMode(int mode) {
        mMode = mode;
        updateLayout();
    }

    public int getTypingIndicatorMode()
    {
        return mMode;       
    }

    int mWidth = 0;
    int mMode = 0;
    String mTitle = "";
    XYRect mIndicatorDestRect = new XYRect();

    public TITitleField() {
        this("");
    }

    public TITitleField(String title) {
        mTitle = title;
    }

    protected void paint(Graphics graphics) {
        graphics.drawText(mTitle, 0, 0, LEFT | ELLIPSIS, mWidth);
        if (0 != mMode) {
            graphics.drawBitmap(mIndicatorDestRect,getIndicator(mMode),0,0);
        }
    }

    private static Bitmap getIndicator(int mode) {
        Bitmap result = null;
        switch (mode) {
        case MODE_ALT:
            result = ALT;
            break;
        case MODE_MULTITAP:
            result = MULTITAP;
            break;
        case MODE_NUMLOCK:
            result = NUMLOCK;
            break;
        case MODE_SHIFT:
            result = SHIFT;
            break;
        case MODE_NONE:
            break;
        default:
            break;
        }
        return result;
    }

    protected void layout(int width, int height) {
        mWidth = width;
        if (0 != mMode) {
            Bitmap indicator = getIndicator(mMode);
            mIndicatorDestRect.width = indicator.getWidth();
            mIndicatorDestRect.height = indicator.getHeight();
            mIndicatorDestRect.y = 0;
            mIndicatorDestRect.x = mWidth - mIndicatorDestRect.width;
        }
        setExtent(width, getPreferredHeight());
    }

    public int getPreferredHeight() {
        int height = getFont().getHeight() + 4;
        if (0 != mMode) {
            int indicatorHeight = getIndicator(mMode).getHeight();
            height = Math.max(height, indicatorHeight);
        }
        return height;
    }
}

我不确定我是否理解,您想显示除已提供的输入指示器之外的输入指示器吗?你想让他们在RIM OS 4.1+上工作吗?我想在RIM 4.1+中显示自定义情况下的标准指示器(例如自定义输入)。
class Scr extends MainScreen {
    static final TITitleField mTitle = new TITitleField("Start");

    public Scr() {
        this.setTitle(mTitle);
    }

    protected void makeMenu(Menu menu, int instance) {
        super.makeMenu(menu, instance);

        int typingIndicatorMode = mTitle.getTypingIndicatorMode();

        if(typingIndicatorMode != mTitle.MODE_NONE)
        menu.add(new MenuItem("None Mode", 0, 0) {
            public void run() {
                mTitle.setTypingIndicatorMode(mTitle.MODE_NONE);
            }
        });

        if(typingIndicatorMode != mTitle.MODE_ALT)
        menu.add(new MenuItem("Alt Mode", 0, 0) {
            public void run() {
                mTitle.setTypingIndicatorMode(mTitle.MODE_ALT);
            }
        });

        if(typingIndicatorMode != mTitle.MODE_MULTITAP)
        menu.add(new MenuItem("Multitap Mode", 0, 0) {
            public void run() {
                mTitle.setTypingIndicatorMode(mTitle.MODE_MULTITAP);
            }
        });

        if(typingIndicatorMode != mTitle.MODE_NUMLOCK)
        menu.add(new MenuItem("NumLock Mode", 0, 0) {
            public void run() {
                mTitle.setTypingIndicatorMode(mTitle.MODE_NUMLOCK);
            }
        });

        if(typingIndicatorMode != mTitle.MODE_SHIFT)
        menu.add(new MenuItem("Shift Mode", 0, 0) {
            public void run() {
                mTitle.setTypingIndicatorMode(mTitle.MODE_SHIFT);
            }
        });
    }
}