Переопределение метода 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) Возможно, какой-то другой код, который вы написали (но не показали), пытается что-то сделать с Графический объект. Например, если вы переопределяете метод paint(Graphics)
в другом поле, вы можете изменить цвет (например, graphics.setColor(Color.WHITE)
) и не забыть сбросить исходный цвет. Возможно, ваше текстовое поле есть, но оно того же цвета, что и его фон. Однако, если бы это происходило, вы все равно могли бы видеть курсор текстового поля, когда вы наделяли это поле фокусом. Я просто не могу сказать по вашему скриншоту.
Лучший способ
Обычно (но не всегда) определение размера поля должно быть обязанностью менеджера/экрана, содержащего поле. Я думаю, что это плохая инкапсуляция, когда большинство полей устанавливают свою ширину (хотя есть исключения). Я бы рекомендовал использовать setMargin()
и флаг USE_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
является то, что если ваше приложение поддерживает вращение в книжной/альбомной ориентации, приведенный выше код будет корректно регулировать ширину поля при изменении ширины экрана. Если вы жестко запрограммируете ширину поля, поле будет слишком широким, когда устройство повернется в книжную ориентацию.
person
Nate
schedule
03.07.2013