BlackBerry - 自定义居中循环Horizo​​ntalFieldManager

时间:2010-03-31 04:49:17

标签: user-interface layout blackberry focus custom-controls

尝试创建一个自定义循环水平管理器,其工作方式如下。它将控制多个字段按钮,其中按钮将始终定位,以便聚焦按钮位于屏幕中间。由于它是一个循环管理器,一旦焦点移动到右侧或左侧按钮,它将移动到屏幕的中心,所有按钮将相应移动(最后一个按钮将成为第一个给它一个循环和无尽的列表感觉)

知道如何解决这个问题吗?

我尝试通过实现自定义管理器来实现这一点,该管理器根据所需的布局对齐按钮。每次调用moveFocus()时,我都会删除所有字段(deleteAll())并按正确顺序重新添加它们。 不幸的是,这不起作用。

1 个答案:

答案 0 :(得分:0)

使用KB How to - Implement advanced buttons, fields, and managers中的Horizo​​ntalButtonFieldSet类:

class CentricHManager extends HorizontalButtonFieldSet {
    int focusedFieldIndex = 0;

    public void focusChangeNotify(int arg0) {
        super.focusChangeNotify(arg0);
        int focusedFieldIndexNew = getFieldWithFocusIndex();
        if (focusedFieldIndexNew != focusedFieldIndex) {
            if (focusedFieldIndexNew - focusedFieldIndex > 0)
                switchField(0, getFieldCount() - 1);
            else
                switchField(getFieldCount() - 1, 0);
        }
    }

    private void switchField(int prevIndex, int newIndex) {
        Field field = getField(prevIndex);
        delete(field);
        insert(field, newIndex);
    }

    public void add(Field field) {
        super.add(field);
        focusedFieldIndex = getFieldCount() / 2;
        setFieldWithFocus(getField(focusedFieldIndex));
    }
}