Context.CreateWindowContext Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Überlädt
CreateWindowContext(Int32, Bundle) |
Erstellt einen Kontext für ein Nicht-Aktivitätsfenster. |
CreateWindowContext(Display, Int32, Bundle) |
Erstellt einen |
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 Display
ist, 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 Resources
aufgeblasen 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#S
bietet 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#S
bietet 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 Display
verwenden.
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.