Codename one - Long Press Event忽略正常按

问题描述 投票:1回答:1

我一直在关注本指南,并在演示结束之前有工作示例(非常有见地的教程,10/10会推荐):

https://codenameone.teachable.com/courses/java-for-mobile-devices-introducing-codename-one/lectures/2647773

现在我想通过添加一个浮动操作按钮来添加新项目,将其扩展为更实用的待办事项列表,如下所示:

fab = FloatingActionButton.createFAB(FontImage.MATERIAL_ADD);
fab.bindFabToContainer(current.getContentPane(), Component.RIGHT,
Component.BOTTOM);
fab.addActionListener(e -> { // show dialog for adding new item });

这本身就可以。现在是棘手的部分。在任何项目上使用长按事件时,应该发生以下两件事:

  1. 长按项目的视觉效果应该改变以表明它正在被选中(不是在复选框或ToggleButton“选择”方面而是一个突出显示。
  2. FAB应更改其图标和actionlistener以删除突出显示的项目。

在从Checkbox类重写longPointPress方法时实现长按事件:

@Override
public void longPointerPress(int x, int y){
     mainForm.longPressEvent(this);
    // no event parameter for e.consume();
}

对我的问题:

Q1:当我使用ToggleButton中的动作侦听器时,“正常”单击事件以及长按事件都会被触发。我需要区分这两者。 longPointerPress方法在参数列表中没有事件,因此在完成长按事件活动后,我无法使用该事件。如何阻止正常的动作侦听器触发?

Q2:对于“高亮效果”,我希望该项目对所有方面都有一个余量,整体缩小该元素的数量。换句话说,不增加以前的总大小。只需添加一个边距,该项目就会变大。如何缩小给定元素并保留所有边,但保留原始大小?

问题3:FAB只能选择“setIcon”,而不能选择“setMaterialIcon”。因此,我每次都会在每次更改时重新创建FAB,因为我不想与所涉及的样式相媲美。有比这更好的方法吗?

//this is the unwanted function, as I dont want to set the style myself
fab.setIcon(FontImage.createMaterial(icon, s));

//Delete FAB pressed, change to Add FAB
fab.remove();
fab = FloatingActionButton.createFAB(FontImage.MATERIAL_ADD);
fab.bindFabToContainer(current.getContentPane(), Component.RIGHT, Component.BOTTOM);
events codenameone togglebutton floating-action-button
1个回答
1
投票

始终在指针释放时调用Action事件,无论是否有长按事件被触发,因为我们“不知道”您处理了longPress事件。您需要创建一个标志,例如:

private boolean handledInLongPress;

public void longPress(int x, int y) {
   // do your stuff
   handledInLongPress = true;
}


private void handleActionEvent(ActionEvent ev) {
    // I'm using this as a placeholder for your event code
    // block the event from propagating and undo anything it might
    // have triggered
    ev.consume();
}

我建议在元素上使用setUIID()并定义一组“删除*”UIID。您可以定义较小的填充和字体以创建缩小的效果,但如果您在此处也有图标,则可能会很棘手。您可以缩小所述图标并保留原始图标以便在客户端属性中进行恢复。

FAB做了很多假设,因此重新创建它(或使用两个实例)可能比尝试设置图标更好。在当前实现中无法在运行时更改FAB的图标。

© www.soinside.com 2019 - 2024. All rights reserved.