پشتیبانی از چند پنجره

در اندروید ۷.۰ و بالاتر، دستگاه‌ها می‌توانند چندین برنامه را همزمان با استفاده از قابلیت چند پنجره‌ای نمایش دهند. اندروید از سه پیکربندی چند پنجره‌ای پشتیبانی می‌کند:

  • Freeform : به کاربران اجازه می‌دهد تا به صورت پویا اندازه پنجره‌های فعالیت را تغییر دهند و بیش از دو برنامه را روی صفحه نمایش خود قابل مشاهده داشته باشند. برای پنجره‌بندی دسکتاپ ، کاربران می‌توانند پنجره‌های freeform را روی دسکتاپ ایجاد کنند که تعاملات به سبک دسکتاپ را ارائه می‌دهد.
  • تقسیم صفحه : پیاده‌سازی پیش‌فرض چندپنجره‌ای که دو پنل فعالیت را در اختیار کاربران قرار می‌دهد تا برنامه‌ها را در آنها قرار دهند.
  • تصویر در تصویر (PiP) : به دستگاه‌هایی که اندروید را اجرا می‌کنند اجازه می‌دهد محتوای ویدیویی را در یک پنجره کوچک پخش کنند در حالی که کاربر با برنامه‌های دیگر در تعامل است.

الزامات دستگاه چند پنجره‌ای

پشتیبانی از چند پنجره به طور پیش‌فرض در اندروید ۷.۰ و بالاتر فعال است. برای غیرفعال کردن آن، پرچم config_supportsMultiWindow را در فایل config.xml دستگاه خود روی false تنظیم کنید.

قابلیت چند پنجره‌ای (Multi-window) به طور پیش‌فرض در تمام دستگاه‌های با رم کم (دستگاه‌هایی که ActivityManager.isLowRam را تعریف می‌کنند) غیرفعال است. دستگاه‌های با رم کم، مقدار پرچم config_supportsMultiWindow را نادیده می‌گیرند.

فری‌فرم

پنجره‌سازی آزاد به کاربر اجازه می‌دهد پنجره‌هایی ایجاد کند که آزادانه قابل تغییر اندازه باشند. پنجره‌سازی آزاد پیش‌نیاز پنجره‌سازی دسکتاپ است. پیش‌نیازهای دستگاه برای فعال‌سازی پنجره‌سازی آزاد به شرح زیر است:

  • پرچم config_supportsMultiWindow را فعال کنید.
  • مدیریت پنجره‌های freeform را به یکی از روش‌های زیر فعال کنید:
    • پرچم config_freeformWindowManagement را در config.xml فعال کنید:
      <feature name="android.software.freeform_window_management" />
    • موارد زیر را در فایل ساخت دستگاه قرار دهید:
      PRODUCT_COPY_FILES += \
      frameworks/native/data/etc/android.software.freeform_window_management.xml:$(TARGET_COPY_OUT_SYSTEM)/etc/permissions/android.software.freeform_window_management.xml

در اندروید ۱۶، تولیدکنندگان اصلی تجهیزات (OEM) می‌توانند با استفاده از گزینه Enable desktop windowing، از پنجره‌بندی دسکتاپ در دستگاه خود برای پیکربندی چندپنجره‌ای آزاد پشتیبانی کنند.

پنجره‌بندی دسکتاپ

پنجره‌بندی دسکتاپ، یک فضای کاری برای چندوظیفگی روی صفحات نمایش بزرگ فراهم می‌کند که بر روی پنجره‌های آزاد ساخته شده است. این فضای کاری در کنار حالت تمام‌صفحه وجود دارد، با قابلیت‌ها و رفتارهای رابط کاربری اضافی که به کاربر یک تجربه چندوظیفگی انعطاف‌پذیرتر می‌دهد:

  • تعامل با صفحه کلید یا ماوس: از هر دو تعامل لمسی و صفحه کلید یا ماوس پشتیبانی می‌کند.
  • پنجره‌های آزاد: برنامه‌ها را در پنجره‌های قابل تغییر اندازه و متحرک با نوار عنوان پنجره و کنترل‌ها اجرا می‌کند.
  • نوار وظیفه بهبود یافته: دسترسی آسان به برنامه‌های در حال اجرا و پین شده را فراهم می‌کند.
  • بهینه‌سازی نمایشگرهای خارجی: مانیتورهای متصل را به محیط‌های دسکتاپ برای دستگاه‌های پشتیبانی‌شده تبدیل می‌کند.
  • میزهای مجازی: به کاربران امکان می‌دهد برنامه‌ها را در چندین فضای کاری سازماندهی کنند.

برای پیکربندی دستگاه برای نمایش پنجره‌های دسکتاپ، پیش‌نیازهای زیر را رعایت کنید:

  • پرچم‌های زیر را فعال کنید:
    • تمام پیش‌نیازهای پنجره‌سازی Freeform
    • پرچم سراسری پنجره‌بندی دسکتاپ config_isDesktopModeSupported
  • رابط کاربری سیستم به نمایشگری با حداقل عرض ۶۰۰ نقطه در اینچ نیاز دارد. نمایش پنجره‌های دسکتاپ ممکن است در صفحه نمایش‌های کوچک‌تر آنطور که انتظار می‌رود کار نکند.
  • دستگاه نباید رم کمی داشته باشد. ActivityManager.isLowRam باید false را برگرداند، زیرا دستگاه‌های با رم کم واجد شرایط هیچ یک از ویژگی‌های چند پنجره‌ای نیستند.

جدول زیر پیکربندی‌هایی را که می‌توان یک دستگاه را برای نمایش پنجره‌های دسکتاپ پیکربندی کرد، بسته به اندازه صفحه نمایش و نحوه استفاده از دستگاه، فهرست می‌کند:

حالت دستی تمام صفحه نمایش دستی تمام صفحه روی نمایشگر متصل تمام صفحه - اولین صفحه بزرگ که تا نمایشگر متصل امتداد می‌یابد پنجره‌بندی دسکتاپ - اولین صفحه نمایش بزرگ
فاکتور فرم مثال تلفن دستی تلفن دستی که از HDMI به صفحه نمایش خارجی پشتیبانی می‌کند تبلتی که از HDMI به نمایشگر خارجی پشتیبانی می‌کند تبلت با کیبورد و پشتیبانی از HDMI برای اتصال به نمایشگر خارجی
تجربه نمایش داخلی تمام صفحه، تقسیم صفحه، تصویر در تصویر، پشتیبانی از حالت آزاد غیر دسکتاپ تمام صفحه، تقسیم صفحه، پشتیبانی از PiP نمایش دسکتاپ تمام صفحه، تقسیم صفحه نمایش، پشتیبانی از PiP از طریق میزکارهای جداگانه پنجره‌بندی دسکتاپ، حالت پیش‌فرض پنجره‌بندی است (از میزکارهای جداگانه پشتیبانی می‌شود)؛ کاربران می‌توانند از طریق میزکارهای جداگانه، وارد پنجره‌بندی دسکتاپ در حالت تمام‌صفحه یا لمسی شوند.
تجربه نمایشگر متصل فقط نمایش معکوس صفحه نمایش داخلی نمایش پنجره‌های دسکتاپ فقط در نمایشگرهای متصل پنجره‌بندی دسکتاپ، میزها را گسترش می‌دهد؛ در نمایشگرهای داخلی نیز موجود است پنجره‌بندی دسکتاپ، میزها را گسترش می‌دهد؛ در نمایشگرهای داخلی نیز موجود است
تنظیمات پیکربندی
config_supportsMultiWindow true true true true
config_freeformWindowManagement true true true true
config_isDesktopModeSupported false true true true
config_canInternalDisplayHostDesktops نادیده گرفته شده false true true
config_enterDesktopByDefaultOnFreeformDisplay نادیده گرفته شده false false true

config_isDesktopModeSupported

پرچم config overlay config_isDesktopModeSupported بالاترین پرچم برای فعال کردن پنجره‌بندی دسکتاپ است. اگر فعال نباشد، سایر تنظیمات پیکربندی نادیده گرفته می‌شوند. آن را در config.xml روی true تنظیم کنید:

<!-- Globally enable Desktop windowing logic -->
    <bool name="config_isDesktopModeSupported">true</bool>

وقتی config_isDesktopModeSupported true باشد، سیستم به‌طور خودکار نمایشگرهای خارجی واجد شرایط (مانند نمایشگرهای متصل از طریق DisplayPort یا HDMI) را به‌عنوان کاندیدا برای نمایش پنجره‌ای دسکتاپ در نظر می‌گیرد. نمایشگر باید توسط مدیر پنجره واجد شرایط در نظر گرفته شود (حداقل عمومی و قابل اعتماد، به نمایش پنجره‌ای دسکتاپ مراجعه کنید). سیستم به‌طور پیش‌فرض تلاش می‌کند تا وظایف را در حالت آزاد روی این نمایشگرها اجرا کند.

پیکربندی_canInternalDisplayHostDesktops

پرچم پوشش پیکربندی config_canInternalDisplayHostDesktops نمایش دسکتاپ را در صفحه نمایش داخلی دستگاه فعال می‌کند. آن را در config.xml روی true تنظیم کنید:

<!-- Allow the primary internal display to host desktop sessions -->
    <bool name="config_canInternalDisplayHostDesktops">true</bool>

نمایش پنجره‌های دسکتاپ در دستگاه‌هایی با صفحه نمایش بزرگ مانند تبلت، در مقایسه با گوشی‌های کوچک‌تر، بهتر عمل می‌کند. در صورت فعال نبودن این گزینه، نمایش پنجره‌های دسکتاپ فقط در نمایشگرهای خارجی (با فرض اینکه دستگاه از HDMI پشتیبانی کند) پشتیبانی می‌شود.

config_enterDesktopByDefaultOnFreeformDisplay

پرچم پوشش پیکربندی config_enterDesktopByDefaultOnFreeformDisplay نمایش پنجره‌ای دسکتاپ را به عنوان حالت پیش‌فرض نمایش پنجره‌ای در نمایشگر داخلی دستگاه تنظیم می‌کند. اگر فعال نباشد، حالت تمام‌صفحه، حالت پیش‌فرض نمایش پنجره‌ای است و میزکارها در کنار هم قرار دارند. آن را در config.xml روی true تنظیم کنید:

<!-- Enable Desktop windowing as the default windowing mode on the internal display -->
    <bool name="config_enterDesktopByDefaultOnFreeformDisplay">true</bool>

فعال کردن محدودیت‌های وظیفه

برای پیکربندی حداکثر تعداد وظایف پشتیبانی‌شده در پنجره‌بندی دسکتاپ، پرچم config overlay با عنوان config_maxDesktopWindowingActiveTasks را در config.xml روی حداکثر تعداد وظایف پشتیبانی‌شده تنظیم کنید. برای پشتیبانی از تعداد نامحدود وظایف، مقدار پرچم را روی 0 تنظیم کنید:

<!-- Maximum number of tasks supported in desktop windowing -->
      <integer name="config_maxDesktopWindowingActiveTasks">4</integer>

فعال کردن محدودیت‌های میز کار

برای پیکربندی حداکثر تعداد میزهای مجازی پشتیبانی شده در پنجره‌بندی دسکتاپ، پرچم config overlay یعنی config_maxDesktopWindowingDesks را در config.xml روی حداکثر تعداد میزهای مجازی پشتیبانی شده تنظیم کنید. برای پشتیبانی از تعداد نامحدود میزهای مجازی، مقدار پرچم را روی 0 تنظیم کنید:

<!-- Maximum number of virtual desks supported in desktop windowing -->
      <integer name="config_maxDesktopWindowingDesks">4</integer>

صفحه نمایش تقسیم شده

حالت پیش‌فرض چندپنجره‌ای، حالت تقسیم صفحه است که در آن رابط کاربری سیستم به دو قسمت عمودی یا افقی در وسط دستگاه تقسیم می‌شود. کاربران می‌توانند با کشیدن خط تقسیم از یک طرف به طرف دیگر یا از بالا به پایین، بسته به جهت دستگاه، اندازه پنجره را تغییر دهند.

پس از فعال کردن تقسیم صفحه، تولیدکنندگان دستگاه می‌توانند حالت آزاد یا تصویر در تصویر (PiP) را فعال کنند.

اندروید ۸.۰ و بالاتر با فشرده‌سازی لانچر هنگام لمس صفحه اصلی توسط کاربر، تقسیم صفحه را بهبود می‌بخشد. برای جزئیات پیاده‌سازی، به تعاملات تقسیم صفحه مراجعه کنید.

تصویر در تصویر

پس از فعال کردن حالت چند پنجره‌ای با پرچم config_supportsMultiWindow ، تولیدکنندگان دستگاه می‌توانند از قابلیت تصویر در تصویر پشتیبانی کنند که به کاربران امکان می‌دهد هنگام مرور سایر فعالیت‌ها، ویدیو تماشا کنند. اگرچه این ویژگی برای دستگاه‌های Android TV در نظر گرفته شده است، اما ممکن است انواع دیگر دستگاه‌ها نیز از این ویژگی پشتیبانی کنند.

برای پشتیبانی از PiP، ویژگی سیستمی PackageManager#FEATURE_PICTURE_IN_PICTURE را در /android/frameworks/base/core/java/android/content/pm/PackageManager.java فعال کنید.

برای جزئیات بیشتر در مورد پیاده‌سازی PiP برای دستگاه‌های دارای اندروید ۸.۰ و بالاتر، به بخش تصویر در تصویر مراجعه کنید.

رابط کاربری سیستم

پشتیبانی از تمام رابط‌های کاربری استاندارد سیستم طبق تأیید حالت چند پنجره‌ای .

برنامه‌ها

برای پشتیبانی از حالت چند پنجره‌ای برای برنامه‌های از پیش بارگذاری شده، به پشتیبانی از حالت چند پنجره‌ای مراجعه کنید.

اعتبارسنجی

برای اعتبارسنجی پیاده‌سازی چندپنجره‌ای خود، آزمون‌های CTS مرتبط را اجرا کنید و تأیید حالت چندپنجره‌ای را دنبال کنید.

نسخه اندروید آزمایش سی تی اس
۷.۰ /platform/cts/hostsidetests/services/activitymanager/src/android/server/cts
۸.۰ /platform/cts/hostsidetests/services/activityandwindowmanager/activitymanager/src/android/server/cts
۹.۰ /platform/cts/tests/framework/base/activitymanager/src/android/server/am
اندروید ۱۰ و بالاتر /platform/cts/tests/framework/base/windowmanager/src/android/server/wm