mobileapplication.mobileevent BACK_BUTTON_PRESSED
mobileapplication.mobileevent BACK_BUTTON_PRESSED
我的两个视图中有 2 个 android 本机音频实例。当用户按下后退按钮并离开视图时,我试图让音频停止,因为它不会自动发生。我查看了文档并查看了 MobileEvent class。我试过实现它的构造函数但没有成功。这是我的第一个应用程序,我刚刚为此目的自己学习了 Java 和 JavaFX,所以一些帮助会很好。我目前的尝试如下。
public void MobileEvent(javafx.event.EventTarget source,
javafx.event.EventType<MobileApplication.MobileEvent> BACK_BUTTON_PRESSED) {
service.backPressed();
}
这是一个 Gluon 应用程序。
像 MobileEvent.BACK_BUTTON_PRESSED
这样的自定义事件的想法是您可以使用事件处理程序订阅它。
例如,如果您创建了一个 layer 并且您希望在用户按下后退按钮时将其关闭:
public BasicView(String name) {
super(name);
// create a custom layer
MobileApplication.getInstance().addLayerFactory("My Layer", () -> new Layer() {
private final Node root;
private final double size = 300;
{
root = new StackPane(new Button("A custom layer"));
root.setStyle("-fx-background-color: lightgreen;");
getChildren().add(root);
getApp().getGlassPane().getLayers().add(this);
// Add event handler to listen to Android Back Button Pressed event, hiding the layer
addEventHandler(MobileApplication.MobileEvent.BACK_BUTTON_PRESSED, e -> {
hide();
e.consume();
});
}
@Override
public void hide() {
setShowing(false);
super.hide();
}
@Override
public void layoutChildren() {
root.setVisible(isShowing());
if (!isShowing()) {
return;
}
root.resize(size, size);
resizeRelocate(0, 0, size, size);
}
});
Button button = new Button("Show Layer");
button.setOnAction(e -> MobileApplication.getInstance().showLayer("My Layer"));
VBox controls = new VBox(15.0, button);
controls.setAlignment(Pos.CENTER);
setCenter(controls);
}
如果您创建一个单一视图项目,使用上面的代码片段,并将其部署到 Android 设备上,您可以验证当您单击按钮时图层是否显示,如果您点击 Android 后退按钮,它会关闭图层。
请注意,如果您再次点击它,它将关闭该应用程序:主页视图已经有一个对此事件的侦听器,这就是该应用程序关闭的原因。或者,如果您处于次要视图中,通过此事件您将 return 到上一个视图。
虽然您可以在代码中的任何位置订阅此事件(就像我在上面的示例中所做的那样),但您可以更轻松地跟踪其他事件。例如,LifecycleEvent events, like
SHOWINGor
HIDING`,已被所有视图使用。
因此您可以向您的自定义视图添加一个侦听器来监听任何这些事件:
public BasicView(String name) {
super(name);
Label label = new Label("This is a custom view");
VBox controls = new VBox(15.0, label);
controls.setAlignment(Pos.CENTER);
setCenter(controls);
setOnShowing(e -> System.out.println("Showing Event"));
setOnHiding(e -> System.out.println("Hiding Event"));
}
请注意,在您的情况下,您可以很容易地找出用户何时离开视图,然后相应地调用服务以停止音频:
setOnHiding(e -> {
Services.get(MyAudioService.class).ifPresent(service -> service.stop());
});
我的两个视图中有 2 个 android 本机音频实例。当用户按下后退按钮并离开视图时,我试图让音频停止,因为它不会自动发生。我查看了文档并查看了 MobileEvent class。我试过实现它的构造函数但没有成功。这是我的第一个应用程序,我刚刚为此目的自己学习了 Java 和 JavaFX,所以一些帮助会很好。我目前的尝试如下。
public void MobileEvent(javafx.event.EventTarget source,
javafx.event.EventType<MobileApplication.MobileEvent> BACK_BUTTON_PRESSED) {
service.backPressed();
}
这是一个 Gluon 应用程序。
像 MobileEvent.BACK_BUTTON_PRESSED
这样的自定义事件的想法是您可以使用事件处理程序订阅它。
例如,如果您创建了一个 layer 并且您希望在用户按下后退按钮时将其关闭:
public BasicView(String name) {
super(name);
// create a custom layer
MobileApplication.getInstance().addLayerFactory("My Layer", () -> new Layer() {
private final Node root;
private final double size = 300;
{
root = new StackPane(new Button("A custom layer"));
root.setStyle("-fx-background-color: lightgreen;");
getChildren().add(root);
getApp().getGlassPane().getLayers().add(this);
// Add event handler to listen to Android Back Button Pressed event, hiding the layer
addEventHandler(MobileApplication.MobileEvent.BACK_BUTTON_PRESSED, e -> {
hide();
e.consume();
});
}
@Override
public void hide() {
setShowing(false);
super.hide();
}
@Override
public void layoutChildren() {
root.setVisible(isShowing());
if (!isShowing()) {
return;
}
root.resize(size, size);
resizeRelocate(0, 0, size, size);
}
});
Button button = new Button("Show Layer");
button.setOnAction(e -> MobileApplication.getInstance().showLayer("My Layer"));
VBox controls = new VBox(15.0, button);
controls.setAlignment(Pos.CENTER);
setCenter(controls);
}
如果您创建一个单一视图项目,使用上面的代码片段,并将其部署到 Android 设备上,您可以验证当您单击按钮时图层是否显示,如果您点击 Android 后退按钮,它会关闭图层。
请注意,如果您再次点击它,它将关闭该应用程序:主页视图已经有一个对此事件的侦听器,这就是该应用程序关闭的原因。或者,如果您处于次要视图中,通过此事件您将 return 到上一个视图。
虽然您可以在代码中的任何位置订阅此事件(就像我在上面的示例中所做的那样),但您可以更轻松地跟踪其他事件。例如,LifecycleEvent events, like
SHOWINGor
HIDING`,已被所有视图使用。
因此您可以向您的自定义视图添加一个侦听器来监听任何这些事件:
public BasicView(String name) {
super(name);
Label label = new Label("This is a custom view");
VBox controls = new VBox(15.0, label);
controls.setAlignment(Pos.CENTER);
setCenter(controls);
setOnShowing(e -> System.out.println("Showing Event"));
setOnHiding(e -> System.out.println("Hiding Event"));
}
请注意,在您的情况下,您可以很容易地找出用户何时离开视图,然后相应地调用服务以停止音频:
setOnHiding(e -> {
Services.get(MyAudioService.class).ifPresent(service -> service.stop());
});