Context.CreateWindowContext Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Overload
| Nama | Deskripsi |
|---|---|
| CreateWindowContext(Int32, Bundle) |
Membuat Konteks untuk jendela non-aktivitas. |
| CreateWindowContext(Display, Int32, Bundle) |
|
CreateWindowContext(Int32, Bundle)
Membuat Konteks untuk jendela non-aktivitas.
[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
Jenis jendela di WindowManager.LayoutParams
- options
- Bundle
Bundel yang digunakan untuk meneruskan opsi terkait jendela
Mengembalikan
Yang Context dapat digunakan untuk membuat non-jendelaandroid.app.Activity activity .
- Atribut
Keterangan
Membuat Konteks untuk jendela non-aktivitas.
Konteks jendela adalah konteks yang dapat digunakan untuk menambahkan jendela non-aktivitas, seperti android.view.WindowManager.LayoutParams#TYPE_APPLICATION_OVERLAY. Konteks jendela harus dibuat dari konteks yang memiliki Displayterkait , seperti android.app.Activity Activity atau konteks yang dibuat dengan #createDisplayContext(Display).
Konteks jendela dibuat dengan sesuai Configuration untuk area tampilan yang dapat ditempati oleh jendela yang dibuat dengannya; itu harus digunakan ketika android.view.LayoutInflater inflating tampilan, sehingga dapat dilambungkan dengan yang tepat Resources.
Di bawah ini adalah kode sampel untuk <b>menambahkan jendela overlay aplikasi pada tampilan utama:</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);
Konfigurasi dan sumber daya konteks ini disesuaikan dengan area tampilan tempat jendela dengan jenis yang disediakan akan ditambahkan. <b>Perhatikan bahwa semua jendela yang terkait dengan konteks yang sama akan memiliki afinitas dan hanya dapat dipindahkan bersama antara tampilan atau area yang berbeda pada tampilan.</b> Jika ada kebutuhan untuk menambahkan jenis jendela yang berbeda, atau jendela yang tidak terkait, Konteks terpisah harus digunakan.
Membuat konteks jendela adalah operasi yang mahal. Penyalahgunaan API ini dapat menyebabkan penurunan performa yang besar. Praktik terbaik adalah menggunakan konteks jendela yang sama jika memungkinkan. Pendekatannya adalah membuat satu konteks jendela dengan jenis dan tampilan jendela tertentu dan menggunakannya di mana pun diperlukan.
Setelah Build.VERSION_CODES#S, konteks jendela menyediakan kemampuan untuk menerima perubahan konfigurasi untuk token yang ada dengan mengambil android.view.WindowManager.LayoutParams#token token alih dari yang android.view.WindowManager.LayoutParams diteruskan di WindowManager#addView(View, LayoutParams). Ini berguna ketika aplikasi perlu melampirkan jendelanya ke aktivitas yang ada untuk kasus penggunaan berbagi token jendela.
Perhatikan bahwa konteks jendela di Build.VERSION_CODES#R tidak memiliki kemampuan ini. Ini adalah no-op untuk konteks jendela di Build.VERSION_CODES#R.
Di bawah ini adalah kode sampel untuk <b>melampirkan token yang ada ke konteks jendela:</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);
Setelah Build.VERSION_CODES#S, konteks jendela menyediakan kemampuan untuk mendengarkan perubahannya Configuration dengan memanggil #registerComponentCallbacks(ComponentCallbacks), sementara jenis Context lain akan mendaftarkan ComponentCallbacks ke #getApplicationContext() its Application context. Perhatikan bahwa konteks jendela hanya menyebarluaskan ComponentCallbacks#onConfigurationChanged(Configuration) panggilan balik.
ComponentCallbacks#onLowMemory() atau panggilan balik ComponentCallbacks2 lainnya tidak akan dipanggil.
Perhatikan bahwa penggunaan android.app.Application atau android.app.Service konteks untuk kueri terkait UI dapat mengakibatkan masalah tata letak atau kelangsungan pada perangkat dengan ukuran layar variabel (misalnya dapat dilipat) atau dalam mode multi-jendela, karena konteks non-UI ini mungkin tidak mencerminkan Configuration perubahan untuk kontainer visual.
Java dokumentasi untuk android.content.Context.createWindowContext(int, android.os.Bundle).
Bagian dari halaman ini adalah modifikasi berdasarkan pekerjaan yang dibuat dan dibagikan oleh Android Open Source Project dan digunakan sesuai dengan istilah yang dijelaskan dalam Lisensi Creative Commons 2.5 Lisensi Atribusi.
Berlaku untuk
CreateWindowContext(Display, Int32, Bundle)
Context Membuat untuk non-jendelaandroid.app.Activity activity pada .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
yang Display akan dikaitkan dengan
- type
- Int32
Jenis jendela di WindowManager.LayoutParams
- options
- Bundle
Bundel yang digunakan untuk meneruskan opsi terkait jendela.
Mengembalikan
Yang Context dapat digunakan untuk membuat non-jendelaandroid.app.Activity activity .
- Atribut
Keterangan
Context Membuat untuk non-jendelaandroid.app.Activity activity pada .Display
Mirip #createWindowContext(int, Bundle)dengan , tetapi display diteruskan, alih-alih secara implisit menggunakan #getDisplay() original Context's Display.
Bagian dari halaman ini adalah modifikasi berdasarkan pekerjaan yang dibuat dan dibagikan oleh Android Open Source Project dan digunakan sesuai dengan istilah yang dijelaskan dalam Lisensi Creative Commons 2.5 Lisensi Atribusi.