Android WindowManager هي خدمة نظام ، وهي مسؤولة عن إدارة قائمة Windows التي تم طلبها ، والتي تكون Windows مرئية ، وكيف يتم وضعها على الشاشة. من بين أشياء أخرى ، يقوم تلقائيًا بإجراء انتقالات النوافذ والرسوم المتحركة عند فتح أو إغلاق تطبيق أو تدوير الشاشة.
يحتوي كل نشاط على نافذة تستخدم لعرض محتواه على الشاشة. عندما تقوم باستدعاء SetContentView على نشاط ما ، فإنه يرفق عرض النافذة الافتراضية للنشاط. تملأ النافذة الافتراضية الشاشة ، بحيث تخفي نافذة نشاطك أي أنشطة أخرى - سيعرض رجل WindowManager أي نافذة موجودة في الأعلى. لذلك عادة لا تحتاج إلى القلق بشأن Windows - يمكنك فقط إنشاء نشاط وسيقوم Android بباقي لك.
لكنك تحتاج إلى التفاعل مع WindowManager إذا كنت ترغب في القيام بشيء غير عادي مثل إنشاء نوافذ عائمة لا تملأ الشاشة. إذا كنت ترغب في إنشاء نافذة عائمة مرئية أمام التطبيقات الأخرى ، فلا يمكنك استخدام نشاط لأن نشاطك سيتوقف عندما يأتي تطبيق آخر إلى المقدمة ، وسيتم إخفاء نافذته أو تدميره. بدلاً من ذلك ، تحتاج إلى عرض نافذة من خدمة خلفية. فمثلا:
WindowManager.LayoutParams p = new WindowManager.LayoutParams(
// Shrink the window to wrap the content rather than filling the screen
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
// Display it on top of other application windows, but only for the current user
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
// Don't let it grab the input focus
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
// Make the underlying application window visible through any transparent parts
PixelFormat.TRANSLUCENT);
// Define the position of the window within the screen
p.gravity = Gravity.TOP | Gravity.RIGHT;
p.x = 0;
p.y = 100;
WindowManager windowManager = (WindowManager)getSystemService(WINDOW_SERVICE);
windowManager.addView(myView, p);
لكي يعمل هذا ، ستحتاج إلى إضافة الإذن التالي إلى AndroidManifest.xml
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>