焦点跳到 VerticalFieldManager 中的顶部图像
Focus skip to top image in VerticalFieldManager
我有两个 VerticalFieldManager
,它们位于 HorizontalFieldManager
中,用于制作两列,其中包含图像。这些图像能够聚焦 () 带边框,但是有一个问题,当我从右向左滚动并且焦点相反时跳到 VerticalFieldManager
中的顶部图像如何避免它并跳到最近的 left/right 图片?负责添加图片的部分:
for(int i=0;i<15;++i){
if(i%2==0){
v1.add(tab[i]);
}else{
v2.add(tab[i]);
}
}
这是因为您的经理只能从 2 个方向进入焦点。对于 HorizontalFieldManager
它的左边和右边,而 VerticalFieldManager
是顶部和底部。当您在水平管理器中向左滚动时,您正在向 -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);
}
};
这假设两个垂直管理器包含相同数量的字段并且只有两列。但是通过一些工作,您可以使此方法处理动态数量的垂直管理器和字段。
我有两个 VerticalFieldManager
,它们位于 HorizontalFieldManager
中,用于制作两列,其中包含图像。这些图像能够聚焦 (VerticalFieldManager
中的顶部图像如何避免它并跳到最近的 left/right 图片?负责添加图片的部分:
for(int i=0;i<15;++i){
if(i%2==0){
v1.add(tab[i]);
}else{
v2.add(tab[i]);
}
}
这是因为您的经理只能从 2 个方向进入焦点。对于 HorizontalFieldManager
它的左边和右边,而 VerticalFieldManager
是顶部和底部。当您在水平管理器中向左滚动时,您正在向 -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);
}
};
这假设两个垂直管理器包含相同数量的字段并且只有两列。但是通过一些工作,您可以使此方法处理动态数量的垂直管理器和字段。