Язык

Context.CreateWindowContext Метод

Определение

Перегрузки

Имя. Описание
CreateWindowContext(Int32, Bundle)

Создает контекст для окна, отличного от действий.

CreateWindowContext(Display, Int32, Bundle)

Context Создает окно, отличноеandroid.app.Activity activity от заданногоDisplay.

CreateWindowContext(Int32, Bundle)

Создает контекст для окна, отличного от действий.

[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

Параметры

type
Int32

Тип окна в WindowManager.LayoutParams

options
Bundle

Пакет, используемый для передачи параметров, связанных с окном

Возвращаемое значение

Объект, Context который можно использовать для создания окон,android.app.Activity activity отличных от окон.

Атрибуты

Комментарии

Создает контекст для окна, отличного от действий.

Контекст окна — это контекст, который можно использовать для добавления окон, отличных от действий, таких как android.view.WindowManager.LayoutParams#TYPE_APPLICATION_OVERLAY. Контекст окна должен быть создан из контекста, связанного с ним, например Display или контекстаandroid.app.Activity Activity, созданного с #createDisplayContext(Display)помощью .

Контекст окна создается с соответствующей Configuration областью отображения, которую могут занять окна, созданные с ним; его необходимо использовать при android.view.LayoutInflater inflating просмотре, чтобы их можно было раздуть соответствующим Resourcesобразом.

Ниже приведен пример кода для <>добавления окна наложения приложения на основной экран:</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);

Конфигурация и ресурсы этого контекста настраиваются на область отображения, в которой будут добавлены окна с предоставленным типом. <B>Обратите внимание, что все окна, связанные с одинаковым контекстом, будут иметь сходство и могут перемещаться только между различными дисплеями или областями на дисплее.</b> , если требуется добавить различные типы окон или не связанные окна, следует использовать отдельные контексты.

Создание контекста окна является дорогостоящей операцией. Неправильное использование этого API может привести к значительному снижению производительности. Рекомендуется использовать тот же контекст окна, когда это возможно. Подход заключается в создании одного контекста окна с определенным типом окна и отображением и его использованием везде, где это необходимо.

После Build.VERSION_CODES#Sэтого контекст окна предоставляет возможность получать изменения конфигурации для существующего маркера путем переопределения android.view.WindowManager.LayoutParams#token token переданного android.view.WindowManager.LayoutParams в WindowManager#addView(View, LayoutParams). Это полезно, если приложению нужно подключить окно к существующему действию для совместного использования маркеров окна.

Обратите внимание, что контекст окна не Build.VERSION_CODES#R имеет этой возможности. Это no-op для контекста окна.Build.VERSION_CODES#R

Ниже приведен пример кода для <подключения>существующего маркера к контексту окна:</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);

После Build.VERSION_CODES#Sэтого контекст окна предоставляет возможность прослушивать изменения Configuration путем вызова #registerComponentCallbacks(ComponentCallbacks), а другие виды Context регистрируют его ComponentCallbacks#getApplicationContext() its Application context. Обратите внимание, что контекст окна распространяет только обратный ComponentCallbacks#onConfigurationChanged(Configuration) вызов. ComponentCallbacks#onLowMemory() или другие обратные вызовы в ComponentCallbacks2 не будут вызываться.

Обратите внимание, что использование android.app.Application или android.app.Service контекст для запросов, связанных с пользовательским интерфейсом, может привести к проблемам с макетом или непрерывностью на устройствах с переменными размерами экрана (например, свертываемыми) или в режимах с несколькими окнами, так как эти контексты, отличные от пользовательского интерфейса, могут не отражать Configuration изменения для визуального контейнера.

Java документации по android.content.Context.createWindowContext(int, android.os.Bundle).

Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".

Применяется к

CreateWindowContext(Display, Int32, Bundle)

Context Создает окно, отличноеandroid.app.Activity activity от заданного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

Параметры

display
Display

Связывание Display с

type
Int32

Тип окна в WindowManager.LayoutParams

options
Bundle

Пакет, используемый для передачи параметров, связанных с окном.

Возвращаемое значение

Объект, Context который можно использовать для создания окон,android.app.Activity activity отличных от окон.

Атрибуты

Комментарии

Context Создает окно, отличноеandroid.app.Activity activity от заданногоDisplay.

#createWindowContext(int, Bundle)Аналогично , но display передается вместо неявного использования #getDisplay() original Context's Display.

Java документации по android.content.Context.createWindowContext(android.view.Display, int, android.os.Bundle).

Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".

Применяется к