焦点在VerticalFieldManager

时间:2015-11-02 16:53:27

标签: blackberry java-me

我有两个VerticalFieldManager位于HorizontalFieldManager中,可以在其中创建两列图像。这些图像能够聚焦(Blackberry add border to image when focus)边框,但是有一个问题,当我从右向左滚动并且相反焦点跳到VerticalFieldManager中的顶部图像时如何避免它并跳到最近的左/右图像?负责添加图片的部分:

for(int i=0;i<15;++i){
        if(i%2==0){
            v1.add(tab[i]);
        }else{
            v2.add(tab[i]);
        }
}

1 个答案:

答案 0 :(得分:2)

之所以这样,是因为您的经理只能从两个方向输入焦点。对于左右HorizontalFieldManagerVerticalFieldManager是顶部和底部。当您向左滚动水平管理器时,您将向-1方向移动。然后将其传递给垂直管理器,其中-1表示它从底部获得焦点。同样,当您向右移动时,它处于+1方向并从顶部聚焦。

最好的选择是听取导航动作(在水平管理器上),然后以编程方式聚焦正确的字段。

HorizontalFieldManager horManager = new HorizontalFieldManager(NO_HORIZONTAL_SCROLL | NO_VERTICAL_SCROLL | USE_ALL_WIDTH | USE_ALL_HEIGHT)
{
    protected boolean navigationMovement(int dx, int dy, int status, int time)
    {
        if(dx > 0 && leftManager.isFocus()) // Moved right from the left manager
        {
            int index = leftManager.getFieldWithFocusIndex();
            rightManager.getField(index).setFocus();
            return true;
        }
        else if(dx < 0 && rightManager.isFocus())// Moved left from the right manager
        {
            int index = rightManager.getFieldWithFocusIndex();
            leftManager.getField(index).setFocus();
            return true;
        }

        return super.navigationMovement(dx, dy, status, time);
    }
};

这假设两个垂直管理器包含相同数量的字段且只包含两列。但是通过一些工作,您可以使此方法处理动态数量的垂直管理器和字段。