【问题标题】:BlackBerry click outside Field黑莓点击外场
【发布时间】:2011-06-10 17:06:35
【问题描述】:

我正在为支持触摸的设备(9500,9550,9800,...)实现自定义 ImageButton 我的问题是在字段外单击(触摸)会在焦点字段中生成事件。(扩展 FieldBitmapField 时)

我可以通过将焦点移到空字段来解决它,但这不是很好。 奇怪的是,这种行为适用于FieldBitmapField,但不适用于ButtonField。 看来ButtonField 何时聚焦,外部点击不会产生按钮事件。

我尝试扩展ButtonField,但我无法摆脱那个愚蠢的按钮背景。

所以我的问题; FieldButtonField 之间的行为差​​异是什么导致在 Field 之外生成事件?

这就是我删除按钮背景的方式:

    // cahange button border
    setBorder(BorderFactory
            .createSimpleBorder(new XYEdges(0, 0, 0, 0)));
    setBorder(VISUAL_STATE_ACTIVE, BorderFactory
            .createSimpleBorder(new XYEdges(0, 0, 0, 0)));

【问题讨论】:

    标签: blackberry imagebutton


    【解决方案1】:

    您只需要在您的 touchEvent() 中为 ImageButton 添加一个检查

    protected boolean touchEvent(TouchEvent message) {
        //make sure the touch is withing the bounds of our Field
        if(message.getX(1) < 0 || message.getX(1) > getWidth() || message.getY(1) < 0 || message.getY(1) > getHeight()) {
            return false;
        }
    
        //Do your work
    }
    

    即使它实际上不在该字段上,触摸事件也会发送到焦点字段,您必须返回 false 以便包含管理器知道将其发送到将接受它的下一个字段(触摸所在的字段是打开的,如果它在空白处则什么都没有)。

    编辑: 要移除按钮背景,请覆盖protected void applyTheme() {}

    【讨论】:

    • 是的,我知道这项检查,但我的问题是有什么区别,为什么 ButtonField 只接受内部点击?顺便提一句。同时我想出了如何摆脱按钮背景,所以现在按钮字段对我来说非常适合
    • @Janci 你能分享一下你是如何获得按钮背景的吗?
    • @TechnodHr 我已经更新了我的答案以显示如何删除按钮装饰
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多