Codename One - 自定义未选择的PickerComponent的文本

时间:2018-05-08 22:47:26

标签: codenameone

我在TextModeLayout中使用模拟器(带有Android皮肤)尝试了两个PickerComponents。我不喜欢字符串的PickerComponent在未选择状态下显示三个点。我也不喜欢Date的PickerComponent显示今天的日期。在这两种情况下,我想显示自定义文本,也因为我不想要默认的选定值。例如,如果我想选择出生日期,我觉得预设今天的日期并不合理。

经过大量试验,我尝试使用以下代码解决此问题,但我不确定这是否是正确的方法。我的问题是什么是便携式方式中最好的approch(适用于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");

1 个答案:

答案 0 :(得分:1)

选择器组件有两个部分,一个文本不是原生的,但弹出窗口是(并且这是大多数问题的根源)。

如果你做了什么,那就去吧。从历史上看,我们建议继承选择器并覆盖updateValue,但是PickerComponent无法做到这一点,所以我添加了一个新方法,该方法应该在下次更新中提供:

PickerComponent cmp = new PickerComponent() {
    protected Picker createPickerInstance() {
        return new Picker() {
            protected void updateValue() {
              // place your logic here.. and invoke setText(...);
            }
        };
    }     
};