Context.CreateWindowContext Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Перегрузки
| Имя. | Описание |
|---|---|
| CreateWindowContext(Int32, Bundle) |
Создает контекст для окна, отличного от действий. |
| CreateWindowContext(Display, Int32, Bundle) |
|
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.
Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".