Codename one - Long Press Event忽略正常按
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codename one - Long Press Event忽略正常按相关的知识,希望对你有一定的参考价值。
我一直在关注本指南,并在演示结束之前有工作示例(非常有见地的教程,10/10会推荐):
现在我想通过添加一个浮动操作按钮来添加新项目,将其扩展为更实用的待办事项列表,如下所示:
fab = FloatingActionButton.createFAB(FontImage.MATERIAL_ADD);
fab.bindFabToContainer(current.getContentPane(), Component.RIGHT,
Component.BOTTOM);
fab.addActionListener(e -> { // show dialog for adding new item });
这本身就可以。现在是棘手的部分。在任何项目上使用长按事件时,应该发生以下两件事:
- 长按项目的视觉效果应该改变以表明它正在被选中(不是在复选框或ToggleButton“选择”方面而是一个突出显示。
- 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);
始终在指针释放时调用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的图标。
以上是关于Codename one - Long Press Event忽略正常按的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Codename One 中设置 FacebookUrlSchemeSuffix 构建提示
将 Codename One iOS AppStore 构建发送到 App Store
如何将 Firebase 添加到 Codename One iOS 应用程序?