我遇到一个奇怪的问题:我有一个使用默认VerticalFieldManager ....的屏幕(USE_ALL_WIDTH | USE_ALL_HEIGHT); .....我们添加了24个额外的字段。这些附加字段的类型为RichTextField,NullField,TextField和ObjectChoiceField。这个屏幕只是一个有效的CRUD表单...用于输入要发送到后端服务器的数据。
有趣的是,我无法使用小型TrackPad(真实设备和模拟器是9850 Torch 2)来向下导航到屏幕底部的字段。由于它是基于触控的设备,我可以向上“拖动”屏幕以显示位于底部但仅在显示虚拟键盘之后的字段。
根据MainManager.getVirtualHeight()方法,我的虚拟高度为970像素,可见高度为800(火炬2)。在初始“可查看内容区域”下方的字段,并且需要滚动才能到达,我无法使用触控板将焦点放置在屏幕下边缘下方的其中一个TextField中.....点事实上,我可能可以将焦点放在那里,但屏幕仍然不会向上滚动那些较低的字段,以便用户可以看到它们。
这是一个非常简单的实现:
public class GetDataScreen extends MainScreen .....
public GetDataScreen()
{
super( MainScreen.USE_ALL_WIDTH | MainScreen.USE_ALL_HEIGHT );
add( field1 );
add( field2 );
....
...
..
.
}
有关导致此问题或如何解决问题的任何想法?为了记录,我也试着打电话:
super( MainScreen.VERTICAL_SCROLL | MainScreen.VERTICAL_SCROLLBAR | MainScreen.USE_ALL_WIDTH | MainScreen.USE_ALL_HEIGHT );
.....希望能解决它,但它没有任何区别。
由于
答案 0 :(得分:2)
好的..在经过一系列的试验和错误之后我做了一些事情(完全绝望)并且它有效!这太愚蠢了,如果不是因为其他人可能会遇到同样的问题,我会自己保留这个......
我只是创建了一个我添加了所有字段的VerticalFieldManager,然后将该VFM添加到屏幕。事实上,这根本不应该有任何区别 - 因为屏幕上的默认管理器是VFM。没有其他的。没有其他属性设置,方法调用,事件.... nada。
去图。
答案 1 :(得分:1)
当你在屏幕上有大型TextFields时,我在OS6 +上看到了这个问题 - 特别是当单个文本字段高于屏幕本身时。如果将文本字段拆分为多个较小的字段,则应该有所帮助。
编辑:
或者,您可以编写自己的VerticalFieldManager,这是我使用的最终解决方案。我有一些定制,但核心布局并不像你想象的那么复杂。这不会对子字段进行左/右/中心对齐,但如果需要,可以轻松添加它。
public class MyVerticalFieldManager extends Manager {
protected MyVerticalFieldManager(long style){
super(
style |
((style & Manager.VERTICAL_SCROLL_MASK) == 0 ? Manager.VERTICAL_SCROLL : 0) |
((style & Manager.VERTICAL_SCROLLBAR_MASK) == 0 ? Manager.VERTICAL_SCROLLBAR : 0));
}
protected void sublayout(int width, int layoutHeight) {
int height = Integer.MAX_VALUE;
int lastY = 0;
int lastBottomMargin = 0;
final int fieldCount = this.getFieldCount();
for(int i = 0; i < fieldCount; i++) {
Field f = this.getField(i);
int margin = Math.max(lastBottomMargin, f.getMarginTop());
final int x = f.getMarginLeft();
final int y = lastY + margin;
final int maxWidth = width-(f.getMarginLeft()+f.getMarginRight());
final int maxHeight = height - y;
this.layoutChild(f, maxWidth, maxHeight);
this.setPositionChild(f, x, y);
lastY = y + f.getHeight();
lastBottomMargin = f.getMarginBottom();
}
this.setVirtualExtent(width, lastY + lastBottomMargin);
this.setExtent(width, layoutHeight);
}
}