Przeglądaj źródła

Merge pull request #52320 from nekomatata/android-plugin-view-order

Add support for adding plugin views behind the main view on Android
Fredia Huya-Kouadio 3 lat temu
rodzic
commit
a160a95ea6

+ 5 - 1
platform/android/java/lib/src/org/godotengine/godot/Godot.java

@@ -295,7 +295,11 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC
 		for (GodotPlugin plugin : pluginRegistry.getAllPlugins()) {
 			View pluginView = plugin.onMainCreate(activity);
 			if (pluginView != null) {
-				containerLayout.addView(pluginView);
+				if (plugin.shouldBeOnTop()) {
+					containerLayout.addView(pluginView);
+				} else {
+					containerLayout.addView(pluginView, 0);
+				}
 			}
 		}
 	}

+ 14 - 0
platform/android/java/lib/src/org/godotengine/godot/plugin/GodotPlugin.java

@@ -191,6 +191,9 @@ public abstract class GodotPlugin {
 	 * The plugin can return a non-null {@link View} layout in order to add it to the Godot view
 	 * hierarchy.
 	 *
+	 * Use shouldBeOnTop() to set whether the plugin's {@link View} should be added on top or behind
+	 * the main Godot view.
+	 *
 	 * @see Activity#onCreate(Bundle)
 	 * @return the plugin's view to be included; null if no views should be included.
 	 */
@@ -310,6 +313,17 @@ public abstract class GodotPlugin {
 		return Collections.emptySet();
 	}
 
+	/**
+	 * Returns whether the plugin's {@link View} returned in onMainCreate() should be placed on
+	 * top of the main Godot view.
+	 *
+	 * Returning false causes the plugin's {@link View} to be placed behind, which can be useful
+	 * when used with transparency in order to let the Godot view handle inputs.
+	 */
+	public boolean shouldBeOnTop() {
+		return true;
+	}
+
 	/**
 	 * Runs the specified action on the UI thread. If the current thread is the UI
 	 * thread, then the action is executed immediately. If the current thread is