Я пытаюсь создать экран Help/About для своего приложения, но обнаружил, что мой код отстой. (Я знаю, что это может потребовать небольшого рефакторинга, но при работе с новым фреймворком я сначала получаю работающий код, а затем сразу же возвращаюсь и рефакторинг, чтобы сделать что-то «правильно»).
Во-первых, то, что я делаю, «не кажется» правильным. Я не уверен, что нужно просто вставить кучу текстовых полей в макет - есть ли лучший способ сделать это?
Во-вторых, VFM занимает большую часть экрана и нажимает кнопку «Закрыть» снизу. То, что я пытаюсь сделать, это сохранить заголовок и кнопку «Закрыть» видимыми, но просто прокрутить VFM.
Как я могу решить эти проблемы?
public class HelpScreen extends PopupScreen {
public HelpScreen() {
super(new VerticalFieldManager(), Field.FOCUSABLE);
/* Construct the Close button */
FieldChangeListener listener = new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
ok();
}
};
ButtonField b = new ButtonField("Close", Field.FIELD_HCENTER);
b.setChangeListener(listener);
/* Construct the text box containing the help */
VerticalFieldManager vfm = new VerticalFieldManager(VERTICAL_SCROLL);
TextField f;
vfm.add(f = new TextField(FIELD_LEFT | READONLY));
f.setText("My application does stuff. This part is the description of what it does.");
vfm.add(f = new TextField(FIELD_LEFT | READONLY));
vfm.add(f = new TextField(FIELD_LEFT | READONLY));
f.setText("Commands:");
vfm.add(f = new TextField(FIELD_LEFT | READONLY));
f.setText("N - New Widget");
vfm.add(f = new TextField(FIELD_LEFT | READONLY));
f.setText("R - Rename Widget");
vfm.add(f = new TextField(FIELD_LEFT | READONLY));
f.setText("D - Duplicate Widget");
vfm.add(f = new TextField(FIELD_LEFT | READONLY));
f.setText("C - Clear Widget");
vfm.add(f = new TextField(FIELD_LEFT | READONLY));
f.setText("Shift-Delete - Delete Widget");
/* Construct the screen */
add(new LabelField("About Widget Wiffleball", Field.FIELD_HCENTER));
add(new SeparatorField());
add(vfm);
add(b);
}
public void ok() {
UiApplication.getUiApplication().popScreen(this);
}
}