<activity>

بناء الجملة:
<activity android:allowEmbedded=["true" | "false"]
          android:allowTaskReparenting=["true" | "false"]
          android:alwaysRetainTaskState=["true" | "false"]
          android:autoRemoveFromRecents=["true" | "false"]
          android:banner="drawable resource"
          android:clearTaskOnLaunch=["true" | "false"]
          android:colorMode=[ "hdr" | "wideColorGamut"]
          android:configChanges=["mcc", "mnc", "locale",
                                 "touchscreen", "keyboard", "keyboardHidden",
                                 "navigation", "screenLayout", "fontScale",
                                 "uiMode", "orientation", "density",
                                 "screenSize", "smallestScreenSize"]
          android:directBootAware=["true" | "false"]
          android:documentLaunchMode=["intoExisting" | "always" |
                                  "none" | "never"]
          android:enabled=["true" | "false"]
          android:enabledOnBackInvokedCallback=["true" | "false"]
          android:excludeFromRecents=["true" | "false"]
          android:exported=["true" | "false"]
          android:finishOnTaskLaunch=["true" | "false"]
          android:hardwareAccelerated=["true" | "false"]
          android:icon="drawable resource"
          android:immersive=["true" | "false"]
          android:label="string resource"
          android:launchMode=["standard" | "singleTop" |
                              "singleTask" | "singleInstance" | "singleInstancePerTask"]
          android:lockTaskMode=["normal" | "never" |
                              "if_whitelisted" | "always"]
          android:maxRecents="integer"
          android:maxAspectRatio="float"
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:noHistory=["true" | "false"]  
          android:parentActivityName="string" 
          android:persistableMode=["persistRootOnly" | 
                                   "persistAcrossReboots" | "persistNever"]
          android:permission="string"
          android:process="string"
          android:relinquishTaskIdentity=["true" | "false"]
          android:resizeableActivity=["true" | "false"]
          android:screenOrientation=["unspecified" | "behind" |
                                     "landscape" | "portrait" |
                                     "reverseLandscape" | "reversePortrait" |
                                     "sensorLandscape" | "sensorPortrait" |
                                     "userLandscape" | "userPortrait" |
                                     "sensor" | "fullSensor" | "nosensor" |
                                     "user" | "fullUser" | "locked"]
          android:showForAllUsers=["true" | "false"]
          android:stateNotNeeded=["true" | "false"]
          android:supportsPictureInPicture=["true" | "false"]
          android:taskAffinity="string"
          android:theme="resource or theme"
          android:uiOptions=["none" | "splitActionBarWhenNarrow"]
          android:windowSoftInputMode=["stateUnspecified",
                                       "stateUnchanged", "stateHidden",
                                       "stateAlwaysHidden", "stateVisible",
                                       "stateAlwaysVisible", "adjustUnspecified",
                                       "adjustResize", "adjustPan"] >   
    ...
</activity>
مضمنة في:
<application>
يمكن أن يحتوي على:
<intent-filter>
<meta-data>
<layout>
description:
يُعلن عن نشاط (فئة Activity فرعية) ينفِّذ جزءًا من واجهة المستخدم المرئية في التطبيق. يجب أن يتم تمثيل جميع الأنشطة بعناصر <activity> في ملف البيان. أي عناصر لم يتم الإعلان عنها لا يراها النظام ولا يتم تشغيلها مطلقًا.
السمات:
android:allowEmbedded
يشير إلى أنّه يمكن تشغيل النشاط كنشاط ثانوي مضمّن لنشاط آخر، لا سيّما إذا كان الطفل موجودًا في حاوية، مثل Display يملكه نشاط آخر. على سبيل المثال، تشير الأنشطة المستخدَمة في إشعارات Wear المخصّصة إلى ذلك، ما يتيح لنظام Wear OS عرض النشاط في ساحة المشاركات الخاصة به والتي تقع في إطار عملية أخرى.

القيمة التلقائية لهذه السمة هي false.

android:allowTaskReparenting
ما إذا كان النشاط يمكن أن ينتقل من المهمة التي بدأتها إلى المهمة التي تقارب فيها الوقت الذي يتم فيه إحضار تلك المهمة إلى الأمام في المرة التالية. وهي قيمة "true" إذا كان بإمكانها التحرّك، و"false" إذا كانت لا تزال مع المَهمّة التي بدأت.

وإذا لم يتم ضبط هذه السمة، ستنطبق القيمة التي تحدّدها السمة allowTaskReparenting المقابلة للعنصر <application> على النشاط. القيمة التلقائية هي "false".

عادةً، عند بدء نشاط ما يرتبط بمهمة النشاط الذي بدأه ويبقى هناك طوال عمره. يمكنك استخدام هذه السمة لإجبارها على إعادة تعيينها إلى المهمة التي لا تقارب إليها عندما لا يتم عرض مهمتها الحالية. عادةً ما يستخدم هذا لجعل أنشطة التطبيق للانتقال إلى المهمة الرئيسية المرتبطة بهذا التطبيق.

على سبيل المثال، إذا كانت رسالة إلكترونية تحتوي على رابط إلى صفحة ويب، فإن النقر على الرابط يؤدي إلى إظهار نشاط يمكنه عرض الصفحة. يتم تحديد هذا النشاط من خلال تطبيق المتصفح ولكن يتم تشغيله كجزء من مهمة البريد الإلكتروني. إذا تمت إعادة رقابة الصفحة إلى مهمة المتصفّح، سيظهر لك عندما يأتي المتصفّح بجانبه ولا يظهر عند ظهور مهمة البريد الإلكتروني مرة أخرى.

يتم تحديد مدى تقارب النشاط من خلال السمة taskAffinity. يتم تحديد تقارب المهمة من خلال قراءة تقارب نشاطها الجذري. لذلك، حسب التعريف، يكون نشاط الجذر دائمًا في مهمة بنفس التقارب. بما أنّ الأنشطة التي تتضمّن وضعَي الإطلاق "singleTask" أو "singleInstance" يمكن أن تكون في جذر المهمة فقط، تقتصر إعادة التربية على وضعَي "standard" و"singleTop". (راجِع أيضًا السمة launchMode.)

android:alwaysRetainTaskState
ما إذا كان يتم دائمًا الحفاظ على حالة المهمة التي يكون النشاط فيها من خلال النظام "true" إذا كانت كذلك، و"false" إذا كان بإمكان النظام إعادة ضبط المهمة على حالتها الأولية في مواقف معيّنة. القيمة التلقائية هي "false". هذه السمة ذات معنى فقط للنشاط الجذري للمهمة. ويتم تجاهله لجميع الأنشطة الأخرى.

عادةً ما يقوم النظام بمحو إحدى المهام، وإزالة جميع الأنشطة من الحزمة فوق نشاط الجذر، في مواقف معينة عندما يعيد المستخدم تحديد تلك المهمة من الشاشة الرئيسية. عادةً ما يتم ذلك إذا لم يقم المستخدم بزيارة المهمة لفترة معينة من الوقت، مثل 30 دقيقة.

مع ذلك، عندما تكون هذه السمة "true"، يعود المستخدمون دائمًا إلى المهمة في حالتها الأخيرة، بغض النظر عن كيفية وصولهم إليها. ويكون هذا مفيدًا في تطبيق مثل متصفح ويب حيث توجد حالات كثيرة، مثل العديد من علامات التبويب المفتوحة، التي لا يريد المستخدمون فقدها.

android:autoRemoveFromRecents
ما إذا كانت المهام التي بدأها النشاط تتضمّن هذه السمة متوفّرة في الشاشة الأخيرة حتى اكتمال آخر نشاط في المهمة إذا تم true، ستتم إزالة المهمة تلقائيًا من شاشة "العناصر الأخيرة". يؤدي هذا الإجراء إلى إلغاء استخدام المتصل للرمز FLAG_ACTIVITY_RETAIN_IN_RECENTS. يجب أن تكون قيمة منطقية، إما "true" أو "false".
android:banner
مورد قابل للرسم يوفر بانر رسوميًا موسّعًا للعنصر المرتبط به. يمكنك الاستخدام مع العلامة <activity> لتوفير بانر تلقائي لنشاط محدّد أو مع العلامة <application> لتوفير إعلان بانر لجميع أنشطة التطبيقات.

يستخدم النظام البانر لتمثيل تطبيق في الشاشة الرئيسية على Android TV. بما أنّ إعلان البانر لا يظهر إلا في الشاشة الرئيسية، يتم تحديده فقط من خلال التطبيقات التي لها نشاط يعالج هدف CATEGORY_LEANBACK_LAUNCHER.

يتم ضبط هذه السمة كمرجع لمورد قابل للرسم يحتوي على الصورة، مثل "@drawable/banner". ليس هناك بانر تلقائي.

لمزيد من المعلومات، يُرجى الاطّلاع على المقالة توفير بانر للشاشة الرئيسية في "بدء استخدام تطبيقات التلفزيون".

android:clearTaskOnLaunch
ما إذا تمت إزالة جميع الأنشطة من المهمة، باستثناء النشاط الجذر، عند إعادة تشغيله من الشاشة الرئيسية "true" إذا كان يتم دائمًا اختصار المهمة إلى نشاطها الجذر، و"false" إذا لم يتم ذلك. القيمة التلقائية هي "false". هذه السمة ذات مغزى فقط للأنشطة التي تبدأ مهمة جديدة - النشاط الجذر. وقد تم تجاهلها لجميع الأنشطة الأخرى في المهمة.

عندما تكون القيمة هي "true"، يتم توجيههم في كل مرة يبدأ فيها المستخدمون المهمة إلى نشاط الجذر الخاص بها بغض النظر عن آخر ما فعلوه في المهمة وبغض النظر عما إذا كانوا قد استخدموا زر "الرجوع" أو "الصفحة الرئيسية" لمغادرة المهمة. عندما تكون القيمة "false"، يمكن محو المهمة من الأنشطة في بعض المواقف، ولكن ليس دائمًا. لمزيد من المعلومات، راجِع السمة alwaysRetainTaskState.

لنفترض أن المستخدم أطلق النشاط P من الشاشة الرئيسية، ومن هناك ينتقل إلى النشاط س. ينقر المستخدم بعد ذلك على الصفحة الرئيسية، ثم يعود إلى النشاط P. عادةً، يرى المستخدم النشاط س، نظرًا لأن هذا هو آخر ما كان يفعله في مهمة P. ومع ذلك، إذا ضبطت P هذه العلامة على "true"، ستتم إزالة جميع الأنشطة فوقها، في هذه الحالة، Q، عندما يشغِّل المستخدم النشاط P من الشاشة الرئيسية. لذلك، يرى المستخدم P فقط عند العودة إلى المهمة.

إذا كانت هذه السمة وallowTaskReparenting هما "true"، يتم نقل أي أنشطة يمكن إعادة تعزيزها إلى المهمة التي يتشاركان فيها الاهتمامات المشتركة. ويتم بعد ذلك تجاهل الأنشطة المتبقية.

يتم تجاهل هذه السمة في حال عدم ضبط FLAG_ACTIVITY_RESET_TASK_IF_NEEDED.

android:colorMode

تحدِّد هذه السياسة وضع الألوان في النشاط. وفي حال تحديدها، يمكن أن تكون السمة hdr أو wideColorGamut.

إذا كان hdr، يطلب عرض النشاط في نطاق ديناميكي عالي إذا كان الجهاز يتيح ذلك.

إذا كان wideColorGamut، يطلب عرض النشاط في وضع الألوان العريضة على الأجهزة المتوافقة. في وضع "مجموعة الألوان العريضة"، يمكن عرض النافذة خارج السلسلة SRGB لعرض ألوان أكثر حيوية. إذا كان الجهاز لا يتيح عرض سلسلة الألوان العريضة، لن يكون لهذه السمة أي تأثير. لمزيد من المعلومات حول العرض في وضع الألوان العريضة، يمكنك الاطّلاع على تحسين الرسومات من خلال محتوى ذي ألوان عريضة.

android:configChanges
تسرد هذه القائمة تغييرات الإعدادات التي يعالجها النشاط نفسه. عند حدوث تغيير في الإعدادات في وقت التشغيل، يتم إيقاف النشاط وإعادة تشغيله تلقائيًا، ولكن إعلان ضبط بهذه السمة يمنع إعادة تشغيل النشاط. بدلاً من ذلك، يظل النشاط قيد التشغيل ويتم تسمية طريقة onConfigurationChanged() الخاصة به.

ملاحظة: لا تستخدِم هذه السمة إلا في حالات خاصة لتحسين أداء التطبيق وسرعة الاستجابة. لمزيد من المعلومات، يُرجى الاطّلاع على التعامل مع التغييرات في إعدادات الإعدادات.

السلاسل التالية هي قيم صالحة لهذه السمة. يتم فصل القيم المتعددة باستخدام |، مثل "locale|navigation|orientation".

القيمة الوصف
"density" تغيير في كثافة العرض، مثلاً عندما يحدّد المستخدم مقياس عرض مختلفًا أو شاشة عرض مختلفة نشطة الآن

تمت الإضافة في المستوى 24 من واجهة برمجة التطبيقات.

"fontScale" تغيير في عامل قياس الخط، مثلاً عندما يختار المستخدم حجم خط عمومي جديدًا
"keyboard" تغيير في نوع لوحة المفاتيح، على سبيل المثال عند توصيل المستخدم بلوحة مفاتيح خارجية
"keyboardHidden" تغيير في تسهيل استخدام لوحة المفاتيح، على سبيل المثال عندما يكشف المستخدم عن لوحة المفاتيح الخارجية
"layoutDirection" تغيير في اتجاه التصميم، مثلاً من اليسار إلى اليمين (LTR) إلى من اليمين إلى اليسار (RTL).

تمت الإضافة في المستوى 17 من واجهة برمجة التطبيقات.

"locale" تغيير في اللغة، على سبيل المثال عندما يختار المستخدم لغة جديدة يظهر بها النص
"mcc" يشير هذا المصطلح إلى تغيير في رمز البلد لرقم التعريف الدولي للمشترك في خدمات الجوّال (IMSI) (مركز عملائي) عند اكتشاف أن شريحة SIM تعمل على تعديل حساب "مركز عملائي".
"mnc" يشير هذا المصطلح إلى تغيير في رمز شبكة الجوّال IMSI (MNC) عند اكتشاف شريحة SIM تعمل على تعديل رقم MNC.
"navigation" تغيير TA إلى نوع التنقل (كرة التتبع أو لوحة التحكم). ولا يحدث ذلك عادةً.
"orientation"

تغيير في اتجاه الشاشة، مثلاً عند تدوير الجهاز للجهاز

ملاحظة: إذا كان تطبيقك يستهدف الإصدار 3.2 من نظام التشغيل Android (المستوى 13 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، يجب أيضًا توضيح إعدادَي "screenLayout" و"screenSize"، لأنّ تنسيق الشاشة وحجمها يمكن أن يتغيّرا عند تبديل الجهاز بين الاتجاه العمودي والأفقي.

"screenLayout" تغيير في تنسيق الشاشة، مثلاً عند تنشيط شاشة عرض مختلفة
"screenSize" تغيير لحجم الشاشة الحالي المتاح.

يمثّل ذلك تغييرًا في الحجم المتاح حاليًا مقارنةً بنسبة العرض إلى الارتفاع الحالية، لذا تتغيّر عندما يبدِّل المستخدم بين الوضعَين الأفقي والعمودي.

تمت الإضافة في المستوى 13 من واجهة برمجة التطبيقات.

"smallestScreenSize" تغيير في حجم الشاشة الفعلي.

يمثّل ذلك التغيير في الحجم بغض النظر عن الاتجاه، وبالتالي فإنّه لا يتغيّر إلا عند تغيُّر حجم الشاشة الفعلي، مثل التبديل إلى شاشة عرض خارجية. يقابل التغيير في هذه الإعدادات تغييرًا في إعدادات smallestWidth.

تمت الإضافة في المستوى 13 من واجهة برمجة التطبيقات.

"touchscreen" تغيير على الشاشة التي تعمل باللمس. ولا يحدث ذلك عادةً.
"uiMode" تغيير في وضع واجهة المستخدم، على سبيل المثال عندما يضع المستخدم الجهاز على مكتب أو قاعدة إرساء للسيارة، أو عندما يتغيّر الوضع الليلي لمزيد من المعلومات عن الأوضاع المختلفة لواجهة المستخدم، يمكنك الاطّلاع على UiModeManager.

تمّت الإضافة في المستوى 8 من واجهة برمجة التطبيقات.

يمكن أن تؤثر كل تغييرات التكوين هذه في قيم الموارد التي يراها التطبيق. لذلك، عند استدعاء onConfigurationChanged()، يكون من الضروري عادةً استرداد جميع الموارد مرة أخرى، بما في ذلك تنسيقات العرض والعناصر القابلة للرسم، لمعالجة التغيير بشكل صحيح.

ملاحظة: لمعالجة تغييرات الإعدادات ذات الصلة بالنوافذ المتعددة، استخدِم كلاً من "screenLayout" و"smallestScreenSize". يمكن استخدام النوافذ المتعددة في Android 7.0 (المستوى 24 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث.

android:directBootAware

ما إذا كان النشاط دراية التمهيد المباشر - أي ما إذا كان يمكن تشغيله قبل أن يفتح المستخدم قفل الجهاز.

ملاحظة: أثناء عملية التشغيل المباشر، يمكن لأي نشاط في تطبيقك الوصول فقط إلى البيانات المخزَّنة في مساحة التخزين المحميّة للجهاز.

القيمة التلقائية هي "false".

android:documentLaunchMode
يحدد كيفية إضافة مثيل جديد من النشاط إلى مهمة في كل مرة يتم فيها تشغيلها. تسمح هذه السمة للمستخدم بالحصول على مستندات متعددة من التطبيق نفسه تظهر في شاشة "الأخيرة".

تتضمن هذه السمة أربع قيم تنتج التأثيرات التالية عندما يفتح المستخدم مستندًا باستخدام التطبيق:

القيمة الوصف
"intoExisting" يبحث النظام عن مهمة تتطابق قيمتها الأساسية ComponentName ومعرّف الموارد المنتظم (URI) للبيانات مع هدف الإطلاق. وإذا عثر النظام على مثل هذه المهمة، يمحو النظام المهمة ويعيد تشغيلها، وبعد ذلك يتلقّى نشاط الجذر طلبًا إلى onNewIntent(android.content.Intent). في حال لم يعثر النظام على مثل هذه المهمة، ينشئ النظام مهمة جديدة.
"always" يؤدي النشاط إلى إنشاء مهمة جديدة للمستند، حتى إذا كان المستند مفتوحًا. وتنطبق هذه الطريقة نفسها على عملية إعداد العلامتَين FLAG_ACTIVITY_NEW_DOCUMENT وFLAG_ACTIVITY_MULTIPLE_TASK.
"none" لا ينشئ النشاط مهمة جديدة للنشاط. هذه هي القيمة التلقائية التي تنشئ مهمة جديدة فقط عند ضبط FLAG_ACTIVITY_NEW_TASK. تتعامل شاشة "العناصر الأخيرة" مع النشاط كما يفعل تلقائيًا، حيث تعرض مهمة واحدة للتطبيق، والتي يتم استئنافها من أي نشاط استدعىه المستخدم آخر مرة.
"never" لا يتم إطلاق النشاط في مستند جديد حتى إذا كان الغرض يحتوي على FLAG_ACTIVITY_NEW_DOCUMENT. يؤدي ضبط هذه السياسة إلى إلغاء سلوك العلامتين FLAG_ACTIVITY_NEW_DOCUMENT وFLAG_ACTIVITY_MULTIPLE_TASK، إذا تم ضبط أي منهما في النشاط، وتعرض شاشة "العناصر الأخيرة" مهمة واحدة للتطبيق يتم استئنافها من أي نشاط استدعىه المستخدم آخر مرة.

ملاحظة: بالنسبة إلى القيم الأخرى من "none" و"never"، يتم تحديد النشاط باستخدام launchMode="standard". إذا لم يتم تحديد هذه السمة، سيتم استخدام documentLaunchMode="none".

android:enabled
ما إذا كان يمكن إنشاء مثيل للنشاط من خلال النظام وتكون هي "true" إذا أمكن، و"false" إذا لم تكن كذلك. القيمة التلقائية هي "true".

ويكون للعنصر <application> سمة enabled الخاصة به والتي تنطبق على جميع مكوّنات التطبيق، بما في ذلك الأنشطة. يجب استخدام السمتَين <application> و<activity> في السمتَين "true"، لأنّهما يتم استخدامهما تلقائيًا، وذلك لكي يتمكّن النظام من إنشاء مثيل للنشاط. وإذا كانت إحدى القيمتَين "false"، لا يمكن إنشاء مثيل له.

android:enableOnBackInvokedCallback
تتيح لك هذه العلامة تفعيل الصور المتحركة التنبؤية للنظام على مستوى النشاط. ويسهّل هذا السلوك نقل التطبيقات الكبيرة المتعددة الأنشطة إلى إيماءات الخلفية التنبؤية.

يؤدي ضبط android:enableOnBackInvokedCallback=false إلى إيقاف صور متحركة تقترحها الرجوع إلى الخلف إمّا على مستوى النشاط أو على مستوى التطبيق، حسب مكان ضبط العلامة، كما يتم توجيه النظام إلى تجاهل طلبات البيانات من واجهة برمجة التطبيقات للنظام الأساسي OnBackInvokedCallback.

android:excludeFromRecents
ما إذا كان سيتم استبعاد المهمة التي بدأها هذا النشاط من شاشة "الأماكن الأخيرة" أي، عندما يكون هذا النشاط هو النشاط الجذر لمهمة جديدة، تحدّد هذه السمة ما إذا كانت المهمة ستظهر في قائمة التطبيقات المستخدمة مؤخرًا. وتكون القيمة "true" إذا تم استبعاد المهمة من القائمة، و"false" في حال تضمينها. القيمة التلقائية هي "false".

android:exported
ما إذا كان يمكن إطلاق النشاط باستخدام مكوّنات تطبيقات أخرى:

  • إذا كان النشاط "true"، يمكن لأي تطبيق الوصول إلى النشاط ويمكن تشغيله حسب اسم فئته بالضبط.
  • في حال "false"، لا يمكن بدء النشاط إلا من خلال مكوّنات التطبيق نفسه أو التطبيقات التي لها رقم تعريف المستخدم نفسه أو مكوّنات نظام مميّزة. هذه هي القيمة التلقائية في حال عدم توفُّر فلاتر أهداف.

إذا كان أحد الأنشطة في تطبيقك يتضمّن فلاتر أهداف، اضبط هذا العنصر على "true" للسماح للتطبيقات الأخرى ببدء تشغيله. على سبيل المثال، إذا كان النشاط هو النشاط الرئيسي للتطبيق ويتضمن category android.intent.category.LAUNCHER.

إذا تم ضبط هذا العنصر على "false" وحاول أحد التطبيقات بدء النشاط، يعرض النظام الخطأ ActivityNotFoundException.

هذه السمة ليست الطريقة الوحيدة للحد من تعرض نشاط ما للتطبيقات الأخرى. تُستخدم الأذونات أيضًا للحد من الكيانات الخارجية التي يمكنها استدعاء النشاط. راجِع السمة permission.

android:finishOnTaskLaunch
ما إذا كان سيتم إيقاف مثيل النشاط الحالي من خلال اختيار المهمة على الشاشة الرئيسية، باستثناء النشاط الجذر، وتكون قيمة السمة "true" في حال إيقاف التشغيل، و"false" إذا لم يتم إيقافها. القيمة التلقائية هي "false".

إذا كانت هذه السمة وallowTaskReparenting هما "true"، تحلّ هذه السمة محل الأخرى. ويتم تجاهل تقارب النشاط. لم تتم إعادة تنظيم النشاط، ولكن تم تلفه.

يتم تجاهل هذه السمة في حال عدم ضبط FLAG_ACTIVITY_RESET_TASK_IF_NEEDED.

android:hardwareAccelerated
ما إذا كان سيتم تفعيل العرض المسرّع بالأجهزة لهذا النشاط أم لا. و"true" إذا كانت مفعّلة، و"false" إذا لم تكن مفعّلة. القيمة التلقائية هي "false".

في نظام التشغيل Android 3.0 والإصدارات الأحدث، يتوفر عارض OpenGL الذي يتم تسريعه باستخدام الأجهزة للتطبيقات لتحسين الأداء في العديد من العمليات الشائعة للرسومات ثنائية الأبعاد. عند تمكين العارض المسرّع بالأجهزة، يتم تسريع معظم العمليات في Canvas وPaint وXfermode وColorFilter وShader والكاميرا.

ينتج عن ذلك رسوم متحركة أكثر سلاسة وتمرير أكثر سلاسة واستجابة محسّنة بشكل عام، حتى في التطبيقات التي لا تستخدم بشكل صريح مكتبات OpenGL الخاصة بإطار العمل. نظرًا للموارد المتزايدة المطلوبة لتفعيل تسريع الأجهزة، فإن تطبيقك يستهلك ذاكرة وصول عشوائي (RAM) أكبر.

لا يتم تسريع جميع عمليات OpenGL 2D. إذا فعَّلت العارض المسرّع بالأجهزة، اختبِر ما إذا كان تطبيقك يمكنه استخدام العارض بدون أخطاء.

android:icon
رمز يمثّل النشاط يتم عرض الأيقونة للمستخدمين عندما يكون تمثيل النشاط مطلوبًا على الشاشة. على سبيل المثال، يتم عرض أيقونات الأنشطة التي تبدأ المهام في نافذة المشغل. غالبًا ما يكون الرمز مصحوبًا بتصنيف. للحصول على معلومات حول التصنيف، يمكنك الاطّلاع على السمة android:label.

يتم تعيين هذه السمة كمرجع لمورد قابل للرسم يحتوي على تعريف الصورة. وإذا لم يتم تعيينه، يتم استخدام الرمز المحدد للتطبيق ككل بدلاً من ذلك. لمزيد من المعلومات، راجِع السمة icon للعنصر <application>.

إنّ رمز النشاط، سواء تم ضبطه هنا أو حسب عنصر <application>، هو أيضًا الرمز التلقائي لجميع فلاتر أهداف النشاط. لمزيد من المعلومات، راجِع السمة icon الخاصة بالعنصر <intent-filter>.

android:immersive
يضبط هذا الإعداد إعدادات الوضع المجسَّم للنشاط الحالي. وإذا كانت السياسة "true"، يتم دائمًا ضبط FLAG_IMMERSIVE البت الخاص بالعضو ActivityInfo.flags، حتى إذا تغيّر وضع الدمج في وقت التشغيل باستخدام طريقة setImmersive().
android:label
تصنيف للنشاط يمكن للمستخدمين قراءته يتم عرض التسمية على الشاشة عندما يتم تمثيل النشاط للمستخدم. غالبًا ما يتم عرضه مع أيقونة النشاط. إذا لم يتم ضبط هذه السمة، سيتم استخدام تصنيف التطبيق ككل بدلاً من ذلك. اطّلِع على السمة label للعنصر <application>.

إنّ تصنيف النشاط، سواء تم ضبطه هنا أو بواسطة العنصر <application>، هو أيضًا التصنيف التلقائي لجميع فلاتر أهداف النشاط. لمزيد من المعلومات، راجِع السمة label الخاصة بالعنصر <intent-filter>.

يتم ضبط التصنيف كمرجع لمورد سلسلة لكي تتم ترجمته مثل السلاسل الأخرى في واجهة المستخدم. ومع ذلك، كتسهيل أثناء تطوير التطبيق، يمكن ضبطه أيضًا كسلسلة أولية.

android:launchMode
تعليمات حول كيفية بدء النشاط هناك خمسة أوضاع تعمل إلى جانب علامات النشاط (الثوابت FLAG_ACTIVITY_*) في كائنات Intent لتحديد ما يحدث عند استدعاء النشاط للتعامل مع هدف:

"standard"
"singleTop"
"singleTask"
"singleInstance"
"singleInstancePerTask"

الوضع التلقائي هو "standard".

كما هو موضّح في الجدول التالي، تنقسم الأوضاع إلى مجموعتَين رئيسيتَين، الأنشطة "standard" و"singleTop" على جانب واحد وأنشطة "singleTask" و"singleInstance" و"singleInstancePerTask" على الجانب الآخر. يمكن إنشاء مثيل لنشاط باستخدام وضع التشغيل "standard" أو "singleTop" عدة مرّات.

يمكن أن تنتمي المثيلات إلى أي مهمة ويمكن أن توجد في أي مكان في مهمة النشاط. ويتم عادةً إطلاق هذه الرموز ضِمن المهمة التي تُسمى startActivity()، ما لم يكن الكائن Intent يحتوي على تعليمات خاصة بـ FLAG_ACTIVITY_NEW_TASK، ويتم في هذه الحالة اختيار مهمة مختلفة. لمزيد من المعلومات، اطّلِع على السمة taskAffinity.

في المقابل، تتضمّن أنشطة "singleTask" و"singleInstance" و"singleInstancePerTask" سلوكيات مختلفة. يكون "singleInstancePerTask" دائمًا في جذر مهمة النشاط. ويمكن أيضًا للجهاز الاحتفاظ بحدث واحد فقط من نشاط "singleInstance" في كل مرة، في حين يمكن إنشاء مثيل "singleInstancePerTask عدة مرات في مهام مختلفة عند ضبط FLAG_ACTIVITY_MULTIPLE_TASK أو FLAG_ACTIVITY_NEW_DOCUMENT.

إنّ النشاط الذي يتم في وضع تشغيل "singleTask" يجمع بين سلوكيات "singleInstance" و"singleInstancePerTask": يمكن إنشاء مثيل للنشاط عدة مرات، ويمكن العثور عليه في أي مكان ضمن مهمة على taskAffinity نفسها. في المقابل، بإمكان الجهاز تحديد مهمة واحدة فقط لتحديد موقع النشاط ""singleTask"" في جذر مهمة النشاط.

يختلف الوضعان "standard" و"singleTop" في أحد الجوانب: في كل مرة يكون هناك هدف جديد لأحد أنشطة "standard"، يتم إنشاء مثيل جديد من الفئة للاستجابة لذلك الهدف. ويعالج كل مثيل هدفًا واحدًا. وبالمثل، يمكن أيضًا إنشاء مثيل جديد من نشاط "singleTop" لمعالجة هدف جديد.

ومع ذلك، إذا كانت المهمة المستهدفة تحتوي على مثيل موجود من النشاط في أعلى الحزمة، ستستلم هذه المثيل الغرض الجديد في طلب onNewIntent(). لا يتم إنشاء مثيل جديد. إذا كان النشاط الحالي عبارة عن نشاط "singleTop" في المهمة المستهدَفة وليس في أعلى الحزمة، أو إذا كان في أعلى حزمة، وليس في المهمة المستهدَفة، يتم إنشاء مثيل جديد ودفعه إلى الحزمة.

وبالمثل، إذا انتقل المستخدم للأعلى إلى نشاط في الحزمة الحالية، يتم تحديد السلوك من خلال وضع تشغيل النشاط الرئيسي. إذا كان النشاط الرئيسي يتضمّن وضع التشغيل singleTop (أو يحتوي الغرض up على FLAG_ACTIVITY_CLEAR_TOP)، يتم نقل العنصر الرئيسي إلى أعلى الحزمة مع الاحتفاظ بحالته.

يتم تلقي غرض التنقل من خلال طريقة onNewIntent() للنشاط الرئيسي. إذا كان النشاط الرئيسي يتضمّن وضع التشغيل standard، وكان الغرض من up لا يحتوي على FLAG_ACTIVITY_CLEAR_TOP، ينبثق كل من النشاط الحالي والمؤسسة الرئيسية منه الحزمة، ويتم إنشاء مثيل جديد من النشاط الرئيسي لتلقّي هدف التنقّل.

يختلف الوضع "singleInstance" أيضًا عن "singleTask" والوضع "singleInstancePerTask" في جانب واحد فقط: النشاط الذي يتضمن وضع التشغيل "singleTask" أو "singleInstancePerTask" يسمح للأنشطة الأخرى بأن تكون الأنشطة الأخرى، مثل أنشطة "standard" و"singleTop" بالضرورة، جزءًا من مهمته.

من ناحية أخرى، لا يسمح نشاط "singleInstance" بأن تكون أي أنشطة أخرى جزءًا من مهمته. يجب أن يكون النشاط الوحيد في المهمة. وإذا بدأ نشاطًا آخر، يتم تعيين هذا النشاط لمهمة مختلفة، كما لو كان FLAG_ACTIVITY_NEW_TASK المقصود.

حالات الاستخدام وضع بدء التنقل هل هناك عدّة أحداث؟ التعليقات
عمليات الإطلاق العادية لمعظم الأنشطة "standard" نعم تلقائي: ينشئ النظام دائمًا مثيلاً جديدًا من النشاط في المهمة المستهدفة ويوجه النية إليها.
"singleTop" بشكل مشروط في حال توفُّر مثيل من النشاط في أعلى المهمة المستهدَفة، يوجِّه النظام الغرض إلى ذلك المثيل من خلال طلب إلى طريقة onNewIntent() الخاصة به، بدلاً من إنشاء مثيل جديد من النشاط.
عمليات الإطلاق المخصّصة
(لا يُنصح باستخدامها للجمهور العام)
"singleTask" بشكل مشروط يقوم النظام بإنشاء النشاط في جذر مهمة جديدة أو يحدد النشاط في مهمة موجودة بنفس التقارب. إذا كان هناك مثيل من النشاط وكان في جذر المهمة، سيوجِّه النظام النية إلى مثيل حالي من خلال طلب إلى طريقة onNewIntent() الخاصة به، بدلاً من إنشاء مثيل جديد.
"singleInstance" لا مثل "singleTask"، إلا أنّ النظام لا يشغِّل أي أنشطة أخرى في المهمة التي تتضمن المثيل. النشاط هو دائمًا العضو الوحيد في مهمته.
"singleInstancePerTask" بشكل مشروط يمكن تشغيل النشاط فقط كنشاط جذر للمهمة، والنشاط الأول الذي قام بإنشاء المهمة، وبالتالي هناك مثيل واحد فقط من هذا النشاط في المهمة. ومع ذلك، يمكن إنشاء مثيل للنشاط عدة مرات في مهام مختلفة.

كما هو موضح في الجدول السابق، "standard" هو الوضع التلقائي وهو مناسب لمعظم أنواع الأنشطة. يُعد "singleTop" أيضًا وضع تشغيل شائع ومفيد للعديد من أنواع الأنشطة. تُعد الأوضاع الأخرى "singleTask" و"singleInstance" و"singleInstancePerTask" غير مناسبة لمعظم التطبيقات. تؤدي إلى إنشاء نموذج تفاعل من المرجح أن يكون غير مألوف للمستخدمين ويختلف تمامًا عن معظم التطبيقات الأخرى.

بغض النظر عن وضع بدء التشغيل الذي تختاره، تأكد من اختبار قابلية استخدام النشاط أثناء الإطلاق وعند الرجوع إليه من الأنشطة والمهام الأخرى باستخدام زر الرجوع.

للحصول على مزيد من المعلومات حول أوضاع بدء التشغيل وتفاعلها مع علامات Intent، يمكنك الاطّلاع على مهام Google وحزمة الخلفية.

android:lockTaskMode
يحدد هذا الإعداد الطريقة التي يعرض بها النظام هذا النشاط عند تشغيل الجهاز في وضع القفل.

بإمكان Android تشغيل المهام بطريقة غامرة تشبه Kiosk ويُطلق عليها "وضع قفل المهام". عند تشغيل النظام في وضع قفل المهمة، يتعذّر عادةً على مستخدمي الأجهزة الاطّلاع على الإشعارات أو الوصول إلى التطبيقات غير المدرَجة في القائمة المسموح بها أو العودة إلى الشاشة الرئيسية ما لم يكن تطبيق Home مدرجًا في القائمة المسموح بها.

لا يمكن تشغيل سوى التطبيقات المُدرَجة في القائمة المسموح بها من خلال وحدة التحكّم بسياسة الجهاز (DPC) عندما يكون النظام في وضع قفل المهمة. ومع ذلك، يمكن تشغيل التطبيقات المميّزة والنظامية في وضع قفل المهام بدون الحاجة إلى إضافتها إلى القائمة المسموح بها.

يمكن أن تكون القيمة أي قيمة من قيم سلسلة R.attr.lockTaskMode التالية:

القيمة الوصف
"normal" القيمة التلقائية. هذه هي القيمة التلقائية. لا يتم تشغيل المهام في وضع قفل المهام ولكن يمكن وضعها هناك من خلال طلب الرمز startLockTask().
"never"

لا يتم تشغيل المهام في وضع lockTask، ولا يمكن لمستخدم الجهاز تثبيت هذه المهام من شاشة "العناصر الأخيرة".

ملاحظة: لا يتوفّر هذا الوضع إلا لتطبيقات النظام والتطبيقات المميّزة. يتم التعامل مع التطبيقات غير المحمية التي لها هذه القيمة على أنّها normal.

"if_whitelisted" إذا كانت وحدة التحكّم بسياسة الجهاز (DPC) تسمح بهذه الحزمة باستخدام DevicePolicyManager.setLockTaskPackages()، سيكون هذا الوضع مطابقًا لـ always، باستثناء أنه يجب طلب النشاط stopLockTask() قبل أن يتمكن من إكماله إذا كانت هذه هي آخر مهمة مقفلة. إذا لم تكن وحدة التحكّم بسياسة الجهاز تسمح بهذه الحزمة، سيكون هذا الوضع مطابقًا للوضع normal.
"always"

يتم دائمًا تشغيل المهام الجذر في هذا النشاط في وضع قفل المهام. إذا كان النظام في وضع قفل المهمة عند بدء تشغيل هذه المهمة، سيتم إطلاق المهمة الجديدة فوق المهمة الحالية. يمكن للمهام التي تم تشغيلها في هذا الوضع الخروج من وضع القفل من خلال طلب الرمز finish().

ملاحظة: لا يتوفّر هذا الوضع إلا لتطبيقات النظام والتطبيقات المميّزة. يتم التعامل مع التطبيقات غير المحمية التي لها هذه القيمة على أنّها normal.

تم تقديم هذه السمة في المستوى 23 من واجهة برمجة التطبيقات.

android:maxRecents
الحد الأقصى لعدد المهام الجذر في هذا النشاط في شاشة "الأماكن الأخيرة". وعند الوصول إلى هذا العدد من الإدخالات، يزيل النظام النسخة الأقل استخدامًا من شاشة "العناصر الأخيرة". القيم الصالحة هي أعداد صحيحة من 1 إلى 50، أو من 1 إلى 25 على الأجهزة ذات الذاكرة المنخفضة. الصفر غير صالح. القيمة التلقائية هي 16.
android:maxAspectRatio

الحد الأقصى لنسبة العرض إلى الارتفاع المتوافقة مع النشاط. فإذا كان التطبيق يعمل على جهاز بنسبة عرض إلى ارتفاع أوسع، فسيعرض النظام التطبيق تلقائيًا على شاشة عريضة أفقيًا ويترك أجزاءً من الشاشة غير مستخدمة حتى يمكن تشغيل التطبيق وفقًا للحد الأقصى لنسبة العرض إلى الارتفاع.

ويتم التعبير عن الحدّ الأقصى لنسبة العرض إلى الارتفاع في شكل حاصل قسمة البُعد الأطول للجهاز مقسومًا على بُعده الأقصر. على سبيل المثال، إذا كان الحد الأقصى لنسبة العرض إلى الارتفاع هي 7:3، اضبط قيمة هذه السمة على 2.33.

على الأجهزة غير القابلة للارتداء، يجب أن تكون قيمة هذه السمة 1.33 أو أعلى. على الأجهزة القابلة للارتداء، يجب أن يكون الإصدار 1.0 أو إصدار أحدث. وإلا، يتجاهل النظام القيمة المحددة.

ملاحظة: يتم تجاهل هذه السمة في حال ضبط النشاط على resizeableActivity على "صحيح"، ما يعني أنّ نشاطك يتيح استخدام أي حجم.

لمزيد من المعلومات حول هذه السمة، راجِع تحديد حد أقصى لنسبة العرض إلى الارتفاع.

android:multiprocess
ما إذا كان يمكن إطلاق مثيل للنشاط في عملية المكون الذي بدأه. وتكون قيمتها "true" إذا أمكن، و"false" إذا لم تكن كذلك. القيمة التلقائية هي "false".

عادةً، يتم إطلاق مثيل جديد من النشاط في عملية التطبيق الذي حدّده، بحيث يتم تشغيل جميع مثيلات النشاط في العملية نفسها. ومع ذلك، إذا تم ضبط هذه العلامة على "true"، يمكن تشغيل مثيلات النشاط في عمليات متعددة، ما يسمح للنظام بإنشاء مثيلات أينما تم استخدامها، شريطة السماح بذلك، وهو أمر غير ضروري أو غير مرغوب فيه على الإطلاق.

android:name
اسم الفئة التي تنفّذ النشاط، وهي فئة فرعية من Activity. وتكون قيمة السمة عادةً اسم فئة مؤهل بالكامل، مثل "com.example.project.ExtracurricularActivity". ومع ذلك، كاختصار، إذا كان الحرف الأول من الاسم نقطة، مثل ".ExtracurricularActivity"، يتم إلحاقه بـ namespace المحددة في ملف build.gradle.

بعد نشر تطبيقك، لا تغيِّر هذا الاسم إلا إذا ضبطت android:exported="false". لا يوجد إعداد افتراضي. يجب تحديد الاسم.

android:noHistory
ما إذا تمت إزالة النشاط من "حزمة الأنشطة" وما إذا كان النشاط قد انتهى أم لا، من خلال استدعاء طريقة finish()، عندما ينتقل المستخدم بعيدًا عنه ويصبح النشاط غير مرئي على الشاشة بعد ذلك. وتكون القيمة "true" إذا انتهى، و"false" إذا لم يكن كذلك. القيمة التلقائية هي "false".

وتعني القيمة "true" أنّ النشاط لا يترك أي أثر تاريخي. لا تبقى في مكدس الأنشطة للمهمة، لذلك لا يتمكن المستخدم من العودة إليها. في هذه الحالة، لا يتم استدعاء onActivityResult() أبدًا إذا بدأت نشاطًا آخر كنتيجة من هذا النشاط.

تم تقديم هذه السمة في المستوى 3 من واجهة برمجة التطبيقات.

android:parentActivityName
اسم فئة الأصل المنطقي للنشاط. يجب أن يتطابق الاسم هنا مع اسم الفئة المحدّد لسمة android:name في عنصر <activity> المقابل.

يقرأ النظام هذه السمة لتحديد النشاط الذي سيتم البدء فيه عندما ينقر المستخدم على الزر للأعلى في شريط الإجراءات. يمكن للنظام أيضًا استخدام هذه المعلومات لتجميع حزمة أنشطة خلفية باستخدام TaskStackBuilder.

لإتاحة المستويات من 4 إلى 16 من واجهة برمجة التطبيقات، يمكنك أيضًا تعريف النشاط الرئيسي باستخدام عنصر <meta-data> الذي يحدّد قيمة "android.support.PARENT_ACTIVITY":

<activity
    android:name="com.example.app.ChildActivity"
    android:label="@string/title_child_activity"
    android:parentActivityName="com.example.app.MainActivity" >
    <!-- Parent activity meta-data to support API level 4+ -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.app.MainActivity" />
</activity>

لمزيد من المعلومات حول بيان النشاط الرئيسي لإتاحة التنقّل للأعلى، يُرجى الاطّلاع على توفير التنقّل.

تم تقديم هذه السمة في المستوى 16 من واجهة برمجة التطبيقات.

android:persistableMode

تحدد هذه السمة كيفية حفظ مثيل من النشاط ضمن مهمة تتضمن عمليات إعادة تشغيل الجهاز.

إذا ضبط النشاط الجذر لمهمة ما قيمة هذه السمة على persistRootOnly، يتم الاحتفاظ بالنشاط الجذر فقط. في الحالات الأخرى، يتم فحص الأنشطة ذات المستوى الأعلى من الحزمة الخلفية للمهمة، ويتم الاحتفاظ بأي من هذه الأنشطة التي تضبط قيمة هذه السمة على persistAcrossReboots.

إذا كنت تستخدم هذه السمة، يجب ضبطها على إحدى القيم التالية:

القيمة الوصف
persistRootOnly القيمة التلقائية. عند إعادة تشغيل النظام، يتم الاحتفاظ بمهمة النشاط، ولكن يتم استخدام الغرض من إطلاق النشاط الجذر فقط.

عندما تؤدي أهداف إطلاق التطبيق إلى تحميل النشاط الجذر لتطبيقك، لا يتلقّى النشاط عنصر PersistableBundle. لذلك، تجنَّب استخدام onSaveInstanceState() للحفاظ على حالة النشاط الجذر لتطبيقك في حال إعادة تشغيل الجهاز.

ملاحظة: لا تؤثّر قيمة السمة هذه في سلوك تطبيقك إلا إذا تم ضبطها على النشاط الجذري للتطبيق.

persistAcrossReboots

يتم الاحتفاظ بحالة هذا النشاط، بالإضافة إلى حالة كل نشاط أعلى من الحزم القديمة التي تتضمّن سمة persistableMode الخاصة بها والتي تم ضبطها على persistAcrossReboots. إذا لم يتضمّن نشاط ما سمة persistableMode تم ضبطها على persistAcrossReboots أو إذا تم إطلاقه باستخدام العلامة Intent.FLAG_ACTIVITY_NEW_DOCUMENT، لن يتم الاحتفاظ بهذا النشاط وجميع الأنشطة التي توضع في أعلى القائمة الخلفية.

عندما يُحمِّل الغرض نشاطًا تم ضبط سمة persistableMode فيه على persistAcrossReboots في تطبيقك، يتلقّى النشاط عنصر PersistableBundle بطريقة onCreate(). بالتالي، يمكنك استخدام السمة onSaveInstanceState() للحفاظ على حالة النشاط عند إعادة تشغيل الجهاز طالما أنّ سمة persistableMode مضبوطة على persistAcrossReboots.

ملاحظة: تؤثر قيمة السمة هذه في سلوك تطبيقك حتى إذا تم ضبطها على نشاط آخر غير النشاط الجذري لتطبيقك.

persistNever

ولا يتم الاحتفاظ بحالة النشاط.

ملاحظة: لا تؤثّر قيمة السمة هذه في سلوك تطبيقك إلا إذا تم ضبطها على النشاط الجذري للتطبيق.

تم تقديم هذه السمة في المستوى 21 من واجهة برمجة التطبيقات.

android:permission
اسم الإذن الذي يجب أن يحصل عليه العملاء لبدء النشاط أو الحصول عليه للاستجابة لهدف معيّن. إذا لم يتم منح المتصل الذي يخصّ startActivity() أو startActivityForResult() الإذن المحدّد، لن يتم تنفيذ الغرض من النشاط.

إذا لم يتم ضبط هذه السمة، سيسري الإذن الذي تم ضبطه في السمة permission لعنصر <application> على النشاط. في حال عدم ضبط أيّ من السمتَين، لا يكون النشاط محميًا بموجب الإذن.

لمزيد من المعلومات حول الأذونات، يُرجى الاطّلاع على قسم الأذونات ضمن النظرة العامة على بيان التطبيق و نصائح الأمان.

android:process
اسم العملية التي يتم تشغيل النشاط فيها. عادةً، يتم تشغيل جميع مكونات التطبيق باسم عملية افتراضي تم إنشاؤه للتطبيق، ولا تحتاج إلى استخدام هذه السمة. ولكن إذا لزم الأمر، يمكنك استبدال اسم العملية التلقائي بهذه السمة، ما يتيح لك نشر مكوّنات التطبيق على عدة عمليات.

إذا كان الاسم المعيّن لهذه السمة يبدأ بعلامة النقطتين (:)، فسيتم إنشاء عملية جديدة خاصة للتطبيق، عندما تكون مطلوبة، ويتم تنفيذ النشاط في تلك العملية.

إذا كان اسم العملية يبدأ بحرف صغير، يتم تنفيذ النشاط في عملية عمومية لهذا الاسم، بشرط أن يكون لديه إذن بذلك. ويسمح هذا للمكونات في التطبيقات المختلفة بمشاركة العملية، ما يقلل استخدام الموارد.

يمكن للسمة process الخاصة بالعنصر <application> ضبط اسم عملية تلقائي مختلف لجميع المكوّنات.

android:relinquishTaskIdentity
ما إذا كان النشاط يتخلّص من معرّفات المهام الخاصة به في نشاط فوقه في حزمة المهام مهمة تم ضبط هذه السمة في نشاط الجذر فيها على "true" يتم استبدال القاعدة Intent بقاعدة النشاط التالي في المهمة.

إذا تم ضبط هذه السمة في النشاط التالي أيضًا على "true"، فإنها تعطي قيمة Intent الأساسية لأي نشاط يبدأه في المهمة نفسها. ويستمر هذا الإجراء لكل نشاط إلى أن يتم رصد نشاط تم ضبط هذه السمة على "false". القيمة التلقائية هي "false".

عند ضبط هذه السمة على "true"، تسمح أيضًا باستخدام النشاط ActivityManager.TaskDescription لتغيير التصنيفات والألوان والرموز في شاشة "أحدث التغييرات".

android:resizeableActivity

تحدِّد هذه السياسة ما إذا كان التطبيق متوافقًا مع وضع النوافذ المتعددة. يمكنك ضبط هذه السمة في العنصر <activity> أو العنصر <application>.

في حال ضبط هذه السمة على "true"، يمكن للمستخدم بدء النشاط في وضع تقسيم الشاشة ووضع التصميم المرن. في حال ضبط السمة على "false"، لا يمكن اختبار التطبيق أو تحسينه ليلائم بيئة متعددة النوافذ. وسيظل بإمكان النظام وضع النشاط في وضع النوافذ المتعددة مع تطبيق وضع التوافق.

لا يضمن ضبط هذه السمة على "false" عدم ظهور تطبيقات أخرى في وضع النوافذ المتعددة على الشاشة، مثلاً في ميزة "نافذة ضمن النافذة" أو على الشاشات الأخرى. لذلك، لا يعني ضبط هذه العلامة أنّ تطبيقك لديه إمكانية وصول حصرية إلى الموارد.

إذا كان تطبيقك يستهدف المستوى 24 من واجهة برمجة التطبيقات أو مستوى أعلى ولم تحدّد قيمة لهذه السمة، يتم ضبط قيمة السمة تلقائيًا على "true".

إذا كان تطبيقك يستهدف المستوى 31 من واجهة برمجة التطبيقات أو المستويات الأعلى، ستعمل هذه السمة بشكل مختلف على الشاشات الصغيرة والكبيرة:

  • الشاشات الكبيرة (sw >= 600dp): تتيح جميع التطبيقات وضع النوافذ المتعددة. تشير السمة إلى ما إذا كان من الممكن تغيير حجم التطبيق، وليس إلى ما إذا كان التطبيق يتيح وضع النوافذ المتعددة. إذا resizeableActivity="false"، يتم إدخال التطبيق في وضع التوافق عند الضرورة للتوافق مع أبعاد العرض.
  • الشاشات الصغيرة (sw < 600dp): إذا كان resizeableActivity="true" والحد الأدنى للعرض والحد الأدنى لارتفاع النشاط ضمن متطلبات النوافذ المتعددة، يتيح التطبيق وضع النوافذ المتعددة. إذا كان resizeableActivity="false"، لا يتيح التطبيق وضع النوافذ المتعددة بغض النظر عن الحد الأدنى للعرض والارتفاع للنشاط.

ملاحظة: يمكن للشركات المصنّعة للأجهزة إلغاء سلوك المستوى 31 من واجهة برمجة التطبيقات.

تمّت إضافة هذه السمة في المستوى 24 من واجهة برمجة التطبيقات.

ملاحظة: يتم تطبيق قيمة نشاط الجذر للمهمة على جميع الأنشطة الإضافية التي تم إطلاقها في المهمة. ويعني ذلك أنّه إذا كان من الممكن تغيير حجم نشاط الجذر لمهمة ما، سيتعامل النظام مع جميع الأنشطة الأخرى في المهمة على أنّها يمكن تغيير حجمها. إذا تعذّر تغيير حجم نشاط الجذر، لا يمكن تغيير حجم الأنشطة الأخرى في المهمة.

android:screenOrientation

اتجاه النشاط على شاشة الجهاز

في نظام التشغيل Android 7.0 (المستوى 24 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يتجاهل النظام التغييرات في وقت التشغيل لهذه السمة إذا كان النشاط في وضع النوافذ المتعددة.

في نظام التشغيل Android 12 (مستوى واجهة برمجة التطبيقات 31) والإصدارات الأحدث، يمكن للشركات المصنّعة للأجهزة ضبط شاشات الأجهزة الفردية (مثل الشاشة بحجم الجهاز اللوحي للجهاز القابل للطي) لتجاهل مواصفات الاتجاه وفرض أن يكون التطبيق المحدّد في الوضع العمودي فقط في الوضع العمودي ولكن مُعدّ للعرض على شاشة عريضة أفقيًا ما يضمن أن يظل التطبيق يحتوي على نسبة عرض إلى ارتفاع عمودية ولكنّه يوجِّه إلى التطبيق لتحسين سهولة الاستخدام.

يمكن أن تكون القيمة أي سلسلة من السلاسل التالية:

"unspecified" القيمة التلقائية. يختار النظام الاتجاه. وبالتالي، قد تختلف السياسة التي يتم استخدامها من جهاز لآخر، وبالتالي قد تختلف الخيارات التي يتم تحديدها في سياقات محدّدة.
"behind" نفس اتجاه النشاط الذي يظهر أسفله مباشرةً في حزمة الأنشطة.
"landscape" الاتجاه الأفقي (عرض الشاشة أعرض من طولها)
"portrait" الاتجاه الرأسي (تكون الشاشة أطول من عرضها).
"reverseLandscape" الاتجاه الأفقي في الاتجاه المعاكس من المناظر الطبيعية العادية. تمت الإضافة في المستوى 9 من واجهة برمجة التطبيقات.
"reversePortrait" الاتجاه العمودي في الاتجاه المعاكس من الوضع العمودي العادي تمت الإضافة في المستوى 9 من واجهة برمجة التطبيقات.
"sensorLandscape" الاتجاه الأفقي، ولكن يمكن أن يكون أفقيًّا أو عكسيًا استنادًا إلى أداة الاستشعار في الجهاز. يتم استخدام أداة الاستشعار حتى إذا اختار المستخدم قفل الدوران المستنِد إلى أداة الاستشعار. تمت الإضافة في المستوى 9 من واجهة برمجة التطبيقات.
"sensorPortrait" الاتجاه الرأسي، ولكن يمكن أن يكون عموديًا عاديًا أو عكسيًا استنادًا إلى أداة الاستشعار في الجهاز. يتم استخدام أداة الاستشعار حتى إذا اختار المستخدم قفل الدوران المستنِد إلى أداة الاستشعار. ومع ذلك، بناءً على تهيئة الجهاز، قد لا يُسمح بالتدوير المقلوب. تمت الإضافة في المستوى 9 من واجهة برمجة التطبيقات.
"userLandscape" الاتجاه الأفقي، ولكن يمكن أن يكون أفقيًا عاديًا أو عكسيًا استنادًا إلى أداة استشعار الجهاز وإلى ما يفضّله المستخدم. تمت الإضافة في المستوى 18 من واجهة برمجة التطبيقات.
"userPortrait" الاتجاه الرأسي، ولكن يمكن أن يكون عموديًا عاديًا أو عكسيًا استنادًا إلى أداة استشعار الجهاز وإلى ما يفضّله المستخدم. ومع ذلك، بناءً على تهيئة الجهاز، قد لا يُسمح بالتدوير المقلوب. تمت الإضافة في المستوى 18 من واجهة برمجة التطبيقات.
"sensor" وتحدِّد أداة استشعار الاتجاه بالجهاز الاتجاه. يعتمد اتجاه الشاشة على كيفية حمل المستخدم للجهاز. ويتغير عندما يقوم المستخدم بتدوير الجهاز. ومع ذلك، لا يتم تدوير بعض الأجهزة إلى جميع الاتجاهات الأربعة المحتملة افتراضيًا. لاستخدام الاتجاهات الأربعة كلها، استخدِم "fullSensor" يتم استخدام أداة الاستشعار حتى إذا اختار المستخدم قفل الدوران القائم على أداة الاستشعار.
"fullSensor" تحدد أداة استشعار اتجاه الجهاز الاتجاه لأي من الاتجاهات الأربعة. يشبه ذلك "sensor"، إلّا إنّه يسمح بأي من اتّجاهات الشاشة الأربعة المحتملة مهما كان الجهاز متوافقًا عادةً. على سبيل المثال، لا تستخدم بعض الأجهزة عادةً الاتجاه الرأسي العكسي أو الأفقي العكسي، ولكن هذا يتيح هذه الاتجاهات. تمت الإضافة في المستوى 9 من واجهة برمجة التطبيقات.
"nosensor" ويتم تحديد الاتجاه بدون الإشارة إلى أداة استشعار الاتجاه الفعلي. يتم تجاهل أداة الاستشعار، لذا لا تدور الشاشة بناءً على كيفية تحريك المستخدم للجهاز.
"user" الاتجاه المفضّل الحالي للمستخدم
"fullUser" إذا فعَّل المستخدم التدوير المستند إلى أداة الاستشعار، سيعمل هذا تمامًا مثل user، وبخلاف ذلك، سيعمل مثل fullSensor ويسمح بأي من الاتجاهات الأربعة المحتملة للشاشة. تمت الإضافة في المستوى 18 من واجهة برمجة التطبيقات.
"locked" يقفل الاتجاه على التدوير الحالي، أيهما كان. تمت الإضافة في المستوى 18 من واجهة برمجة التطبيقات.

ملاحظة: عندما تعلن عن إحدى القيم الأفقية أو الرأسية، يعتبر ذلك مطلبًا صارمًا للاتجاه الذي يجري فيه النشاط. تتيح القيمة التي تعلن عنها الفلترة حسب خدمات مثل Google Play، وبالتالي لا يتوفر تطبيقك إلا على الأجهزة التي تدعم الاتجاه الذي تطلبه أنشطتك. على سبيل المثال، في حال تعريف "landscape" أو "reverseLandscape" أو "sensorLandscape"، يعني ذلك أنّ تطبيقك لن يتوفّر إلا للأجهزة التي تتيح استخدام الاتجاه الأفقي.

يجب أيضًا الإفصاح صراحةً عن أنّ تطبيقك يتطلّب استخدام الاتجاه العمودي أو الأفقي مع العنصر <uses-feature>، مثل <uses-feature android:name="android.hardware.screen.portrait"/>. هذا سلوك فلترة يوفّره Google Play والخدمات الأخرى التي تتوافق معه، ولا تتحكّم المنصّة نفسها في إمكانية تثبيت تطبيقك عندما يكون الجهاز متوافقًا مع اتجاهات معيّنة فقط.

android:showForAllUsers

ما إذا كان النشاط يظهر عندما يكون المستخدم الحالي للجهاز مختلفًا عن المستخدم الذي أطلق النشاط. يمكنك ضبط هذه السمة على قيمة حرفية، مثل "true" أو "false"، أو يمكنك ضبط السمة على سمة مورد أو مظهر تحتوي على قيمة منطقية.

تمّت إضافة هذه السمة في المستوى 23 من واجهة برمجة التطبيقات.

android:stateNotNeeded
ما إذا كان يمكن إنهاء النشاط وإعادة تشغيله بنجاح بدون حفظ حالته وتكون الحالة "true" إذا كان من الممكن إعادة تشغيله بدون الرجوع إلى حالته السابقة، و"false" إذا كانت حالته السابقة مطلوبة. القيمة التلقائية هي "false".

عادةً، قبل إيقاف النشاط مؤقتًا لتوفير الموارد، تُعرف طريقة onSaveInstanceState() بها. تخزِّن هذه الطريقة الحالة الحالية للنشاط في عنصر Bundle، والتي يتم تمريرها بعد ذلك إلى onCreate() عند إعادة تشغيل النشاط. إذا تم ضبط هذه السمة على "true"، قد لا يتم استدعاء السمة onSaveInstanceState() وتم تمرير onCreate() null بدلاً من Bundle كما هو الحال عند بدء النشاط للمرة الأولى.

يعني الإعداد "true" أنّه يمكن إعادة تشغيل النشاط بدون حالة الاحتفاظ به. على سبيل المثال، يستخدم النشاط الذي يعرض الشاشة الرئيسية هذا الإعداد للتأكد من عدم إزالته في حال تعطُّله لسبب ما.

android:supportsPictureInPicture

تحدِّد هذه السياسة ما إذا كان النشاط متوافقًا مع ميزة عرض نافذة ضمن النافذة.

android:taskAffinity
المهمة التي يرتبط بها النشاط. تنتمي الأنشطة ذات نفس التقارب من الناحية النظرية إلى نفس المهمة، إلى نفس "التطبيق" من منظور المستخدم. يتم تحديد تقارب المهمة من خلال تقارب نشاطها الجذري.

تحدّد الاهتمامات المشتركة شيئين: المهمة التي تمت إعادة ضبط النشاط الرئيسي لها (راجع السمة allowTaskReparenting) والمهمة التي تضم النشاط عند إطلاقه باستخدام العلامة FLAG_ACTIVITY_NEW_TASK.

بشكل افتراضي، جميع الأنشطة في التطبيق لها نفس التقارب. يمكنك تعيين هذه السمة لتجميعها بشكل مختلف، وحتى وضع الأنشطة المحددة في تطبيقات مختلفة ضمن نفس المهمة. لتحديد أن النشاط ليس له تقارب لأي مهمة، قم بتعيينه على سلسلة فارغة.

إذا لم يتم تعيين هذه السمة، يكتسب النشاط مجموعة التقارب للتطبيق. راجِع السمة taskAffinityلعنصر <application>. اسم التقارب التلقائي للتطبيق هو namespace الذي تم ضبطه في ملف build.gradle.

android:theme
مرجع إلى مورد نمط يحدد موضوعًا عامًا للنشاط. يؤدي ذلك إلى ضبط سياق النشاط تلقائيًا لاستخدام علامة theme هذه، وقد يؤدي أيضًا إلى بدء تشغيل الصور المتحركة قبل بدء النشاط، وذلك بهدف مطابقة الشكل الذي يبدو عليه النشاط بشكل أفضل.

إذا لم يتم ضبط هذه السمة، سيكتسب النشاط مجموعة السمات للتطبيق ككل، من السمة theme لعنصر <application>. إذا لم يتم ضبط هذه السمة أيضًا، سيتم استخدام مظهر النظام التلقائي. لمزيد من المعلومات، يُرجى الاطّلاع على الأنماط والمظاهر.

android:uiOptions
خيارات إضافية لواجهة مستخدم أحد الأنشطة يجب أن تكون القيمة واحدة مما يلي.

القيمةالوصف
"none"ليست هناك خيارات إضافية لواجهة المستخدم. هذا هو الخيار التلقائي.
"splitActionBarWhenNarrow"إضافة شريط في أسفل الشاشة لعرض بنود العمل في شريط التطبيقات، والمعروف أيضًا باسم شريط الإجراءات، عند تقييده بالمساحة الأفقية، كما هو الحال في الوضع العمودي على الهاتف. بدلاً من ظهور عدد صغير من بنود الإجراءات في شريط التطبيقات أعلى الشاشة، يتم تقسيم شريط التطبيقات إلى قسم التنقل العلوي والشريط السفلي لبنود الإجراءات. وهذا يعني توفير مساحة معقولة ليس فقط لعناصر العمل، ولكن أيضًا لعناصر التنقل والعنوان في الجزء العلوي. لا يتم تقسيم عناصر القائمة عبر الشريطين. وهي تظهر دائمًا معًا.

لمزيد من المعلومات عن شريط التطبيقات، راجِع مقالة إضافة شريط التطبيقات.

تمّت إضافة هذه السمة في المستوى 14 من واجهة برمجة التطبيقات.

android:windowSoftInputMode
كيفية تفاعل النافذة الرئيسية للنشاط مع النافذة التي تحتوي على لوحة المفاتيح اللينة على الشاشة يؤثّر إعداد هذه السمة في أمرَين:
  • ما إذا كانت لوحة المفاتيح اللينة مخفية أو مرئية عندما يصبح النشاط محور تركيز المستخدم.
  • ما إذا تم تغيير حجم النافذة الرئيسية للنشاط لإفساح المجال للوحة المفاتيح اللينة أو لتحريك محتواها لجعل التركيز الحالي مرئيًا عندما يكون جزء من النافذة مغطى بلوحة المفاتيح اللينة.

يجب أن يكون الإعداد إحدى القيم الواردة في الجدول التالي أو مجموعة من قيمة "state..." واحدة بالإضافة إلى قيمة "adjust..." واحدة. إنّ ضبط قيم متعدّدة في أي من المجموعتَين، مثل قيم "state..." المتعدّدة، يؤدي إلى نتائج غير محدّدة. يتم فصل القيم الفردية بشريط عمودي (|)، كما هو موضح في المثال التالي:

<activity android:windowSoftInputMode="stateVisible|adjustResize" ... >

إنّ القيم التي يتم ضبطها هنا (باستثناء "stateUnspecified" و"adjustUnspecified") تلغي القيم المحدَّدة في المظهر.

القيمة الوصف
"stateUnspecified" ولا يتم تحديد ما إذا كانت لوحة المفاتيح اللينة مخفية أو مرئية. يختار النظام حالة مناسبة أو يعتمد على الإعدادات في المظهر.

هذا هو الإعداد التلقائي لسلوك لوحة المفاتيح الافتراضية.

"stateUnchanged" ويتم الاحتفاظ بلوحة المفاتيح اللينة في أي حالة كانت عليها، سواء كانت مرئية أو مخفية، عندما يظهر النشاط.
"stateHidden" يتم إخفاء لوحة المفاتيح اللينة عندما يختار المستخدم النشاط، أي عندما ينتقل المستخدم مباشرةً إلى النشاط قبل الانتقال إليه، بدلاً من العودة إليه عند مغادرة نشاط آخر.
"stateAlwaysHidden" تكون لوحة المفاتيح اللينة مخفية دائمًا عندما يكون تركيز النافذة الرئيسية للنشاط على الإدخال.
"stateVisible" تصبح لوحة المفاتيح اللينة مرئية عندما يختار المستخدم النشاط، أي عندما يتنقل المستخدم بشكل إيجابي إلى النشاط، بدلاً من العودة إليه عند مغادرة نشاط آخر.
"stateAlwaysVisible" تظهر لوحة المفاتيح اللينة عندما تتلقّى النافذة تركيز الإدخال.
"adjustUnspecified" لم يتم تحديد ما إذا كان سيتم تغيير حجم النافذة الرئيسية للنشاط لتوفير مساحة للوحة المفاتيح اللينة أو محتوى جزء النافذة لإظهار التركيز الحالي على الشاشة. يختار النظام أحد هذه الأوضاع تلقائيًا استنادًا إلى ما إذا كان محتوى النافذة يتضمن أي طرق عرض تنسيق يمكنها تمرير محتواها. وفي حال توفّر طريقة عرض مماثلة، يتم تغيير حجم النافذة، بافتراض أنّ التمرير يمكن أن يجعل محتوى النافذة مرئياً بالكامل ضمن مساحة أصغر.

هذا هو الإعداد التلقائي لسلوك النافذة الرئيسية.

"adjustResize" يتم دائمًا تغيير حجم النافذة الرئيسية للنشاط لتوفير مساحة للوحة المفاتيح اللينة على الشاشة.
"adjustPan" لا يتم تغيير حجم النافذة الرئيسية للنشاط لتوفير مساحة للوحة المفاتيح اللينة. وبدلاً من ذلك، يتم تحريك محتوى النافذة تلقائيًا بحيث لا تحجب لوحة المفاتيح التركيز الحالي أبدًا، ويتمكّن المستخدمون دائمًا من الاطّلاع على ما يكتبونه. ولا يستحسن هذا الأمر بشكل عام من تغيير الحجم، لأنّ المستخدم قد يحتاج إلى إغلاق لوحة المفاتيح اللينة للوصول إلى الأجزاء المحجوبة من النافذة والتفاعل معها.

تم تقديم هذه السمة في المستوى 3 من واجهة برمجة التطبيقات.

تم تقديمه في:
المستوى 1 من واجهة برمجة التطبيقات لجميع السمات باستثناء noHistory و windowSoftInputMode اللذان تمت إضافتهما في المستوى 3 من واجهة برمجة التطبيقات.
راجع أيضًا:
<application>
<activity-alias>