Context.CreateWindowContext Methode

Definition

Überlädt

CreateWindowContext(Int32, Bundle)

Erstellt einen Kontext für ein Nicht-Aktivitätsfenster.

CreateWindowContext(Display, Int32, Bundle)

Erstellt einen Context für ein Nicht-Fensterandroid.app.Activity activity auf der angegebenen Display.

CreateWindowContext(Int32, Bundle)

Erstellt einen Kontext für ein Nicht-Aktivitätsfenster.

[Android.Runtime.Register("createWindowContext", "(ILandroid/os/Bundle;)Landroid/content/Context;", "GetCreateWindowContext_ILandroid_os_Bundle_Handler", ApiSince=30)]
public virtual Android.Content.Context CreateWindowContext (int type, Android.OS.Bundle? options);
[<Android.Runtime.Register("createWindowContext", "(ILandroid/os/Bundle;)Landroid/content/Context;", "GetCreateWindowContext_ILandroid_os_Bundle_Handler", ApiSince=30)>]
abstract member CreateWindowContext : int * Android.OS.Bundle -> Android.Content.Context
override this.CreateWindowContext : int * Android.OS.Bundle -> Android.Content.Context

Parameter

type
Int32

Fenstertyp in WindowManager.LayoutParams

options
Bundle

Ein Bündel, das verwendet wird, um fensterbezogene Optionen zu übergeben

Gibt zurück

Ein Context , der zum Erstellen von Nichtfensternandroid.app.Activity activity verwendet werden kann.

Attribute

Hinweise

Erstellt einen Kontext für ein Nicht-Aktivitätsfenster.

Ein Fensterkontext ist ein Kontext, der zum Hinzufügen von Nicht-Aktivitätsfenstern verwendet werden kann, z android.view.WindowManager.LayoutParams#TYPE_APPLICATION_OVERLAY. B. . Ein Fensterkontext muss aus einem Kontext erstellt werden, dem ein zugeordnet Displayist, z android.app.Activity Activity . B. oder ein Kontext, der mit #createDisplayContext(Display)erstellt wurde.

Der Fensterkontext wird mit dem für den Bereich der Anzeige geeigneten Configuration erstellt, den die damit erstellten Fenster belegen können. Er muss bei android.view.LayoutInflater inflating Ansichten verwendet werden, damit sie mit der richtigen Resourcesaufgeblasen werden können.

Im Folgenden finden Sie einen Beispielcode zum <>Hinzufügen eines Anwendungsüberlagerungsfensters auf der primären Anzeige:</b>

...
            final DisplayManager dm = anyContext.getSystemService(DisplayManager.class);
            final Display primaryDisplay = dm.getDisplay(DEFAULT_DISPLAY);
            final Context windowContext = anyContext.createDisplayContext(primaryDisplay)
                    .createWindowContext(TYPE_APPLICATION_OVERLAY, null);
            final View overlayView = Inflater.from(windowContext).inflate(someLayoutXml, null);

            // WindowManager.LayoutParams initialization
            ...
            // The types used in addView and createWindowContext must match.
            mParams.type = TYPE_APPLICATION_OVERLAY;
            ...

            windowContext.getSystemService(WindowManager.class).addView(overlayView, mParams);

Die Konfiguration und die Ressourcen dieses Kontexts werden an einen Bereich der Anzeige angepasst, in dem die Fenster mit dem angegebenen Typ hinzugefügt werden. <b>Beachten Sie, dass alle Fenster, die demselben Kontext zugeordnet sind, über eine Affinität verfügen und nur zwischen verschiedenen Anzeigen oder Bereichen auf einem Bildschirm zusammen verschoben werden können.</b> Wenn verschiedene Fenstertypen oder nicht zugeordnete Fenster hinzugefügt werden müssen, sollten separate Kontexte verwendet werden.

Das Erstellen eines Fensterkontexts ist ein teurer Vorgang. Der Missbrauch dieser API kann zu einem erheblichen Leistungsabfall führen. Die bewährte Methode besteht darin, nach Möglichkeit denselben Fensterkontext zu verwenden. Ein Ansatz besteht darin, einen Fensterkontext mit einem bestimmten Fenstertyp zu erstellen und anzuzeigen und überall dort zu verwenden, wo er benötigt wird.

Nach Build.VERSION_CODES#Sbietet der Fensterkontext die Möglichkeit, Konfigurationsänderungen für vorhandene Token zu empfangen, indem der android.view.WindowManager.LayoutParams#token token des android.view.WindowManager.LayoutParams übergebenen überschrieben wird WindowManager#addView(View, LayoutParams). Dies ist nützlich, wenn eine Anwendung ihr Fenster an eine vorhandene Aktivität für den Anwendungsfall für die Fenstertokenfreigabe anfügen muss.

Beachten Sie, dass der Fensterkontext in Build.VERSION_CODES#R diese Funktion nicht verfügte. Dies ist ein No-Op für den Fensterkontext in Build.VERSION_CODES#R.

Im Folgenden finden Sie Beispielcode zum <>Anfügen eines vorhandenen Tokens an einen Fensterkontext:</b>

final DisplayManager dm = anyContext.getSystemService(DisplayManager.class);
            final Display primaryDisplay = dm.getDisplay(DEFAULT_DISPLAY);
            final Context windowContext = anyContext.createWindowContext(primaryDisplay,
                    TYPE_APPLICATION, null);

            // Get an existing token.
            final IBinder existingToken = activity.getWindow().getAttributes().token;

            // The types used in addView() and createWindowContext() must match.
            final WindowManager.LayoutParams params = new WindowManager.LayoutParams(TYPE_APPLICATION);
            params.token = existingToken;

            // After WindowManager#addView(), the server side will extract the provided token from
            // LayoutParams#token (existingToken in the sample code), and switch to propagate
            // configuration changes from the node associated with the provided token.
            windowContext.getSystemService(WindowManager.class).addView(overlayView, mParams);

Nach Build.VERSION_CODES#Sbietet der Fensterkontext die Möglichkeit, auf seine Configuration Änderungen zu lauschen, indem aufgerufen #registerComponentCallbacks(ComponentCallbacks)wird, während andere Arten von Context für registrieren ComponentCallbacks#getApplicationContext() its Application context. Beachten Sie, dass der Fensterkontext nur den Rückruf weitergibt ComponentCallbacks#onConfigurationChanged(Configuration) . ComponentCallbacks#onLowMemory() oder andere Rückrufe in ComponentCallbacks2 werden nicht aufgerufen.

Beachten Sie, dass die Verwendung android.app.Application oder android.app.Service kontextbezogener Abfragen zu Layout- oder Kontinuitätsproblemen auf Geräten mit variablen Bildschirmgrößen (z. B. Faltbares) oder im Modus mit mehreren Fenstern führen kann, da diese Nicht-UI-Kontexte möglicherweise nicht die Configuration Änderungen für den visuellen Container widerspiegeln.

Java-Dokumentation für android.content.Context.createWindowContext(int, android.os.Bundle).

Teile dieser Seite sind Änderungen, die auf Arbeiten basieren, die vom Android Open Source Project erstellt und freigegeben wurden und gemäß den In Attribution License beschriebenen Begriffen verwendet werden.

Gilt für:

CreateWindowContext(Display, Int32, Bundle)

Erstellt einen Context für ein Nicht-Fensterandroid.app.Activity activity auf der angegebenen Display.

[Android.Runtime.Register("createWindowContext", "(Landroid/view/Display;ILandroid/os/Bundle;)Landroid/content/Context;", "GetCreateWindowContext_Landroid_view_Display_ILandroid_os_Bundle_Handler", ApiSince=31)]
public virtual Android.Content.Context CreateWindowContext (Android.Views.Display display, int type, Android.OS.Bundle? options);
[<Android.Runtime.Register("createWindowContext", "(Landroid/view/Display;ILandroid/os/Bundle;)Landroid/content/Context;", "GetCreateWindowContext_Landroid_view_Display_ILandroid_os_Bundle_Handler", ApiSince=31)>]
abstract member CreateWindowContext : Android.Views.Display * int * Android.OS.Bundle -> Android.Content.Context
override this.CreateWindowContext : Android.Views.Display * int * Android.OS.Bundle -> Android.Content.Context

Parameter

display
Display

Die Display , der zugeordnet werden soll

type
Int32

Fenstertyp in WindowManager.LayoutParams

options
Bundle

Ein Bündel, das verwendet wird, um fensterbezogene Optionen zu übergeben.

Gibt zurück

Ein Context , der zum Erstellen von Nichtfensternandroid.app.Activity activity verwendet werden kann.

Attribute

Hinweise

Erstellt einen Context für ein Nicht-Fensterandroid.app.Activity activity auf der angegebenen Display.

#createWindowContext(int, Bundle)Ähnlich wie , aber das display wird übergeben, anstatt implizit zu #getDisplay() original Context's Displayverwenden.

Java-Dokumentation für android.content.Context.createWindowContext(android.view.Display, int, android.os.Bundle).

Teile dieser Seite sind Änderungen, die auf Arbeiten basieren, die vom Android Open Source Project erstellt und freigegeben wurden und gemäß den In Attribution License beschriebenen Begriffen verwendet werden.

Gilt für: