Я следовал этому руководству и у меня есть рабочий пример до самого конца демонстрации (очень полезный учебник, порекомендует 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 });
Само по себе это работает отлично.Теперь самое сложное.При использовании события длинного нажатия для любого из элементов должны произойти две вещи:
- визуальный элемент долго нажатого элемента должен измениться, чтобы указать, что он выбран (не в терминах Checkbox или ToggleButton«выберите», но выделите.
- FAB должен изменить свой значок и список действий, чтобы удалить выделенный элемент.
Событие длинного нажатия достигается при переопределении метода longPointPress из флажкакласс:
@Override
public void longPointerPress(int x, int y){
mainForm.longPressEvent(this);
// no event parameter for e.consume();
}
На мои вопросы:
Q1: Когда я использую прослушиватель действий из ToggleButton, запускается как обычное событие нажатия, так и длинное событие Press.Однако мне нужно различать эти два метода. Метод longPointerPress не имеет события в списке параметров, поэтому я не могу использовать это событие после выполнения моей длинной операции Press Event. Как я могу предотвратить запуск прослушивателя обычного действия?
Q2: для "эффекта подсветки" я бы хотел, чтобы у элемента было поле со всех сторон, oveралл сокращает элемент на эту сумму.Другими словами, без увеличения предыдущего общего размера.Просто добавляя поле, элемент становится больше.Как можно сжать данный элемент с полем со всех сторон, но сохранить исходный размер?
Q3: 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);