Я попробовал два компонента PickerComponent внутри TextModeLayout с помощью симулятора (со скином Android). Мне не нравится, что PickerComponent of Strings показывает три точки в невыбранном состоянии. Мне также не нравится, что PickerComponent of Date показывает сегодняшнюю дату. В обоих случаях я хочу показать пользовательский текст, а также потому, что я не хочу выбранного по умолчанию значения. Например, если я хочу выбрать дату рождения, я не думаю, что имеет смысл предварительно установить дату на сегодняшний день.
После многих испытаний я попытался решить эту проблему с помощью следующего кода, но я не уверен, что это правильный путь. У меня вопрос, какой подход лучше всего переносить (это нормально для Android и для iOS):
/**
* Set a custom text for an unselected PickerComponent placed in a
* TextModeLayout
*
* @param picker
* @param text
*/
private void pickerComponentSetUnselectedText(PickerComponent picker, String text) {
picker.getPicker().setText(text);
picker.getPicker().setUIID("TextHint");
picker.getPicker().addActionListener(l -> {
l.getComponent().setUIID("TextField");
});
}
Я пытался использовать этот метод так:
TextModeLayout textModeLayout = new TextModeLayout(4, 1);
Container inputPersonData = new Container(textModeLayout);
TextComponent name = new TextComponent().label("Nome");
TextComponent surname = new TextComponent().label("Cognome");
PickerComponent gender = PickerComponent.createStrings("Maschio", "Femmina", "altro").label("Genere");
PickerComponent date = PickerComponent.createDate(new Date()).label("Data di nascita");
inputPersonData.add(name);
inputPersonData.add(surname);
inputPersonData.add(gender);
inputPersonData.add(date);
pickerComponentSetUnselectedText(gender, "Genere");
pickerComponentSetUnselectedText(date, "Data di nascita");