覆盖TextField#layout()
方法
public void layout(int width, int height)
{
super.layout(500, 30);
setExtent(500, 30);
}
是一种设置文本字段宽度的方法。所以,我认为这里还有其他问题。
1)可能,当您更改代码时,您错误地删除了对
add(t_username);
您没有向我们展示您实际添加该字段的位置,因此如果您没有在add(t_username)
其他地方调用,它就不会可见。字段必须添加到Manager
或Screen
才能可见。
2)也许您编写的其他代码(但未显示)正在尝试对Graphics对象执行某些操作。例如,如果您要覆盖paint(Graphics)
另一个字段中的方法,您可能正在更改颜色(例如graphics.setColor(Color.WHITE)
)并且不记得重置原始颜色。可能您的文本字段在那里,但它与背景颜色相同。但是,如果发生这种情况,当您赋予该字段焦点时,您仍然可以看到文本字段光标。我根本无法从你的截图中看出。
更好的方法
通常(但不总是),包含字段的管理器/屏幕应负责确定其大小。我认为让大多数字段设置自己的宽度是不好的封装(尽管有例外)。我建议使用setMargin()
andUSE_ALL_WIDTH
标志为这个文本字段设置一个合理的宽度:
public class TextFieldScreen extends MainScreen {
private TextField t_username;
public TextFieldScreen() {
super(Field.FIELD_VCENTER);
HorizontalFieldManager row = new HorizontalFieldManager();
LabelField label = new LabelField("Username");
label.setMargin(new XYEdges(2, 0, 2, 10));
row.add(label);
t_username = new TextField(TextField.USE_ALL_WIDTH);
t_username.setMaxSize(10);
t_username.setBorder(BorderFactory.createSimpleBorder(new XYEdges(1,1,1,1), Border.STYLE_SOLID));
t_username.setMargin(new XYEdges(2, 10, 2, 10));
row.add(t_username);
add(row);
}
}
与硬编码宽度为 相比,此解决方案的一个好处500
是,如果您的应用支持纵向/横向旋转,则上面的代码将随着屏幕宽度的变化正确调整字段宽度。如果您对字段宽度进行硬编码,则当设备旋转为纵向时,字段将太宽。