<activity>

بنية الجملة:
<activity android:allowEmbedded=["true" | "false"]
          android:allowTaskReparenting=["true" | "false"]
          android:alwaysRetainTaskState=["true" | "false"]
          android:autoRemoveFromRecents=["true" | "false"]
          android:banner="drawable resource"
          android:canDisplayOnRemoteDevices=["true" | "false"]
          android:clearTaskOnLaunch=["true" | "false"]
          android:colorMode=[ "hdr" | "wideColorGamut"]
          android:configChanges=["colorMode", "density",
                                 "fontScale", "fontWeightAdjustment",
                                 "grammaticalGender", "keyboard",
                                 "keyboardHidden", "layoutDirection", "locale",
                                 "mcc", "mnc", "navigation", "orientation",
                                 "screenLayout", "screenSize",
                                 "smallestScreenSize", "touchscreen", "uiMode"]
          android:directBootAware=["true" | "false"]
          android:documentLaunchMode=["intoExisting" | "always" |
                                  "none" | "never"]
          android:enabled=["true" | "false"]
          android:enableOnBackInvokedCallback=["true" | "false"]
          android:excludeFromRecents=["true" | "false"]
          android:exported=["true" | "false"]
          android:finishOnTaskLaunch=["true" | "false"]
          android:forceQueryable=["true" | "false"]
          android:hardwareAccelerated=["true" | "false"]
          android:icon="drawable resource"
          android:immersive=["true" | "false"]
          android:intentMatchingFlags=["none" | "enforceIntentFilter" | "allowNullAction"]
          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:minAspectRatio="float"
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:noHistory=["true" | "false"]  
          android:parentActivityName="string" 
          android:persistableMode=["persistRootOnly" | 
                                   "persistAcrossReboots" | "persistNever"]
          android:permission="string"
          android:preferMinimalPostProcessing=["true" | "false"]
          android:process="string"
          android:recreateOnConfigChanges=["colorMode" | "keyboard" |
                                           "keyboardHidden" | "mcc" | "mnc" |
                                           "navigation" | "touchscreen"]
          android:relinquishTaskIdentity=["true" | "false"]
          android:requireContentUriPermissionFromCaller=["none" | "read" | "readAndWrite" |
                                                         "readOrWrite" | "write"] 
          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>
<property>
description:
تُعرِّف هذه السمة نشاطًا (فئة فرعية من Activity) ينفّذ جزءًا من واجهة المستخدم المرئية للتطبيق. يجب تمثيل جميع الأنشطة باستخدام عناصر <activity> في ملف البيان. ولن يرى النظام أي أذونات لم يتم الإفصاح عنها في هذا الملف، ولن يتم تنفيذها أبدًا.
السمات:
android:allowEmbedded

يشير إلى أنّه يمكن تشغيل النشاط كنشاط فرعي مضمّن لنشاط آخر، خاصةً في حال كان النشاط الفرعي مضمّنًا في حاوية، مثل Display يملكه نشاط آخر. على سبيل المثال، يجب أن تحدّد الأنشطة المستخدَمة في الإشعارات المخصّصة على Wear ذلك، كي يتمكّن Wear من عرض النشاط في خلاصة السياق التي تقع في عملية أخرى.

القيمة التلقائية لهذه السمة هي 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:canDisplayOnRemoteDevices

يشير إلى ما إذا كان يمكن عرض النشاط على جهاز بعيد قد يعمل أو لا يعمل بنظام التشغيل Android. يجب أن تكون قيمة منطقية، إما "true" أو "false".

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

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

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

لنفترض أنّ المستخدم يشغّل النشاط P من الشاشة الرئيسية، ثم ينتقل منه إلى النشاط Q. بعد ذلك، ينقر المستخدم على "الصفحة الرئيسية"، ثم يعود إلى النشاط P. في العادة، يرى المستخدم النشاط Q، لأنّه آخر نشاط كان يمارسه في مهمة 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".

القيمة الوصف
"colorMode"

تغيّرت إمكانات وضع الألوان للشاشة (سلسلة الألوان أو النطاق الديناميكي).

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

"density"

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

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

"fontScale" تغيير في عامل قياس الخط، مثلما يحدث عندما يختار المستخدم حجم خط عامًا جديدًا.
"fontWeightAdjustment" تغيّر مقدار زيادة وزن الخط.
"grammaticalGender" تم تغيير الجنس النحوي للغة. يمكنك الاطّلاع على GrammaticalInflectionManager.

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

"keyboard" تغيير في نوع لوحة المفاتيح، مثلاً عندما يوصل المستخدم لوحة مفاتيح خارجية
"keyboardHidden" تغيير في إمكانية استخدام لوحة المفاتيح، مثلاً عندما يعرض المستخدم لوحة المفاتيح الخارجية
"layoutDirection"

تغيير اتجاه التنسيق، مثلاً من اليسار إلى اليمين (LTR) إلى اليمين إلى اليسار (RTL)

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

"locale" تغيير في اللغة، مثلاً عندما يختار المستخدم لغة جديدة يتم عرض النص بها
"mcc" تغيير رمز البلد حيث يتم تشغيل شبكة الجوّال (MCC) في رقم التعريف الدولي للمشترك في خدمات الجوّال (IMSI) عند رصد شريحة SIM تؤدي إلى تعديل رمز البلد حيث يتم تشغيل شبكة الجوّال (MCC).
"mnc" تغيير رمز شبكة الجوّال (MNC) الخاص بمعرّف المشترك الدولي للأجهزة الجوّالة (IMSI) عند رصد شريحة SIM تؤدي إلى تعديل رمز شبكة الجوّال
"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:forceQueryable

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

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

لمزيد من المعلومات، يُرجى الاطّلاع على الدليل حول فلترة إذن الوصول التلقائي إلى الحِزم.

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

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

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

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

android:icon

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

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

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

android:immersive
تضبط هذه الطريقة إعداد الوضع الغامر للنشاط الحالي. إذا كانت القيمة "true"، سيتم دائمًا ضبط بت FLAG_IMMERSIVE للعضو ActivityInfo.flags، حتى إذا تغيّر الوضع الغامر في وقت التشغيل باستخدام الطريقة setImmersive().
android:intentMatchingFlags

استخدِم هذه السمة لضبط طريقة مطابقة النظام للأهداف الواردة مع مكوّنات التطبيق. لا يتم تطبيق أي قواعد مطابقة خاصة بشكل تلقائي.

تلغي القيمة المحدّدة في العلامة <activity> القيمة المحدّدة في العلامة <application>.

يجب أن تكون القيمة واحدة أو أكثر من العلامات التالية، مفصولة بـ "|":

علم الوصف
none يوقف هذا الخيار جميع قواعد المطابقة الخاصة للطلبات الواردة. عند تحديد علامات متعدّدة، يتم حل القيم المتعارضة من خلال منح الأولوية للعلامة none.
enforceIntentFilter

يفرض مطابقة أكثر صرامة لطلبات Intent الواردة:

  • يجب أن تتطابق الأهداف الصريحة مع فلتر Intent الخاص بالمكوِّن المستهدف.
  • لا تتطابق الأهداف التي لا تتضمّن إجراءً مع أي فلتر أهداف.
allowNullAction

يخفّف من قواعد المطابقة للسماح بمطابقة الأهداف بدون إجراء. تُستخدَم هذه العلامة مع enforceIntentFilter لتحقيق السلوك التالي:

  • يجب أن تتطابق الأهداف الصريحة مع فلتر Intent الخاص بالمكوِّن المستهدف.
  • يُسمح بأن تتطابق الأهداف التي لا تتضمّن إجراءً مع أي فلتر أهداف.

لمزيد من المعلومات، يُرجى الاطّلاع على قسم نوايا أكثر أمانًا في التغييرات في سلوك Android 16 (المستوى 36 لواجهة برمجة التطبيقات).

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 (أو كان الـ intent up يحتوي على FLAG_ACTIVITY_CLEAR_TOP)، يتم نقل النشاط الأصل إلى أعلى الحزمة مع الحفاظ على حالته.

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

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

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

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

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

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

لمزيد من المعلومات حول أوضاع بدء النشاط وتفاعلها مع علامات Intent، راجِع المهام والأنشطة السابقة.

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

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

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

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

القيمة الوصف
"normal" القيمة التلقائية هذه هي القيمة التلقائية. لا يتم تشغيل المهام في وضع قفل المهمة، ولكن يمكن وضعها فيه من خلال استدعاء startLockTask().
"never"

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

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

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

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

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

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

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

الحدّ الأقصى لنسبة العرض إلى الارتفاع التي يتيحها النشاط

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

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

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

لمزيد من المعلومات حول هذه السمة، يُرجى الاطّلاع على R.attr.maxAspectRatio.

android:minAspectRatio

تمثّل هذه السمة الحد الأدنى لنسبة العرض إلى الارتفاع التي يتيحها النشاط.

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

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

يجب أن تكون القيمة أكبر من أو تساوي 1.0، وإلا سيتجاهل النظام القيمة المحدّدة.

لمزيد من المعلومات حول هذه السمة، يُرجى الاطّلاع على R.attr.minAspectRatio.

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

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

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

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

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

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

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

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

يقرأ النظام هذه السمة لتحديد النشاط الذي سيتم بدء تشغيله عندما ينقر المستخدم على الزر "أعلى" في شريط الإجراءات. يمكن للنظام أيضًا استخدام هذه المعلومات لإنشاء سجلّ خلفي للأنشطة باستخدام 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:preferMinimalPostProcessing

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

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

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

android:process

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

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

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

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

android:recreateOnConfigChanges

تحدّد هذه السمة تغييرات الإعدادات التي يجب أن تؤدي إلى إعادة إنشاء النشاط. إذا تم تحديد تغيير في الإعداد هنا (وليس في android:configChanges)، سيتم إعادة إنشاء النشاط عند حدوث هذا التغيير.

لمزيد من المعلومات، يُرجى الاطّلاع على الدليل حول إعادة إنشاء نشاط عند إجراء تغييرات في الإعدادات.

android:relinquishTaskIdentity

تحديد ما إذا كان النشاط يتنازل عن معرّفات المهام الخاصة به إلى نشاط أعلى منه في حزمة المهام تؤدي مهمة تم ضبط سمة نشاطها الأساسي على "true" إلى استبدال Intent الأساسي بنشاط المهمة التالي.

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

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

android:requireContentUriPermissionFromCaller

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

يُرجى العِلم أنّ عملية التنفيذ تسري على معرّفات الموارد المنتظمة للمحتوى داخل Intent.getData() وIntent.EXTRA_STREAM وIntent.getClipData().

يمكن أن تكون قيمة سلسلة، باستخدام '\\;' لإلغاء الأحرف مثل '\\n' أو '\\uxxxx' لحرف يونيكود.

يجب أن تكون إحدى القيم الثابتة التالية.

ثابت القيمة الوصف
بلا قيمة 0 الإعداد التلقائي، لا يلزم توفّر أذونات معيّنة.
قراءة 1 يفرض على المستدعي إذن الوصول للقراءة إلى معرّفات الموارد المنتظمة (URI) للمحتوى الذي تم تمريره.
readAndWrite 4 يفرض على المستدعي أن يكون لديه إذن الوصول إلى معرّفات الموارد المنتظمة (URI) للمحتوى الذي تم تمريره لكل من القراءة والكتابة.
readOrWrite 3 يفرض على المستدعي أن يكون لديه إذن قراءة أو كتابة لمعرّفات الموارد المنتظمة (URI) للمحتوى الذي تم تمريره.
write 2 يفرض هذا الخيار أن يكون لدى المستدعي إذن وصول للكتابة إلى معرّفات الموارد المنتظمة للمحتوى التي تم تمريرها.
android:resizeableActivity

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

يمكنك ضبط هذه السمة في العنصر <activity> أو العنصر <application>.

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

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

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

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

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

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

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

android:screenOrientation

الاتجاه المطلوب للنشاط

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

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

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

"unspecified" القيمة التلقائية يختار النظام الاتجاه. وقد تختلف السياسة التي تستخدمها، وبالتالي الخيارات التي يتم اتخاذها في سياقات معيّنة، من جهاز إلى آخر.
"behind" الاتجاه نفسه الخاص بالنشاط الذي يقع أسفل منه مباشرةً في مجموعة النشاطات
"landscape" الوضع الأفقي (يكون العرض أوسع من الارتفاع).
"portrait" الاتجاه العمودي (يكون العرض أطول من عرضه)
"reverseLandscape" الاتجاه الأفقي في الاتجاه المعاكس للاتجاه الأفقي العادي تمت إضافتها في مستوى واجهة برمجة التطبيقات 9.
"reversePortrait" الاتجاه الرأسي في الاتجاه المعاكس للاتجاه الرأسي العادي تمت إضافتها في مستوى واجهة برمجة التطبيقات 9.
"sensorLandscape" الاتجاه الأفقي، ولكن يمكن أن يكون أفقيًا عاديًا أو أفقيًا معكوسًا استنادًا إلى مستشعر الجهاز يتم استخدام المستشعر حتى إذا كان المستخدم قد حظر التدوير المستند إلى المستشعر. تمت إضافتها في مستوى واجهة برمجة التطبيقات 9.
"sensorPortrait" الوضع العمودي، ولكن يمكن أن يكون عاديًا أو معكوسًا استنادًا إلى مستشعر الجهاز يتم استخدام المستشعر حتى إذا كان المستخدم قد حظر التدوير المستند إلى المستشعر. ومع ذلك، قد لا يُسمح بتدوير الشاشة بمقدار 180 درجة استنادًا إلى إعدادات الجهاز. تمت إضافتها في مستوى واجهة برمجة التطبيقات 9.
"userLandscape" الوضع الأفقي، ولكن يمكن أن يكون أفقيًا عاديًا أو أفقيًا معكوسًا استنادًا إلى مستشعر الجهاز وإعدادات المستخدم المفضّلة تمت إضافته في المستوى 18 من واجهة برمجة التطبيقات.
"userPortrait" الوضع العمودي، ولكن يمكن أن يكون عاديًا أو معكوسًا استنادًا إلى مستشعر الجهاز وإعدادات المستخدم المفضّلة. ومع ذلك، قد لا يُسمح بالتدوير بمقدار 180 درجة، وذلك حسب إعدادات الجهاز. تمت إضافته في المستوى 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>. اسم التطابق التلقائي لأحد التطبيقات هو مساحة الاسم التي تم ضبطها في ملف 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" لا يتم تغيير حجم النافذة الرئيسية للنشاط لإتاحة مساحة للوحة المفاتيح البرمجية. بل يتم تحريك محتوى النافذة تلقائيًا بحيث لا تحجب لوحة المفاتيح التركيز الحالي أبدًا، ويستطيع المستخدمون دائمًا رؤية ما يكتبونه. ويكون هذا الإجراء أقل ملاءمة من تغيير الحجم، لأنّه قد يحتاج المستخدم إلى إغلاق لوحة المفاتيح على الشاشة للوصول إلى الأجزاء المحجوبة من النافذة والتفاعل معها.
"adjustNothing" لا يتم تغيير حجم النافذة الرئيسية للنشاط أو تحريكها لإتاحة مساحة للوحة المفاتيح الافتراضية. يكون النشاط مسؤولاً عن توفير مساحة للوحة المفاتيح الافتراضية باستخدام هوامش النافذة. بالنسبة إلى الأنشطة التي تتعامل مع هوامش النافذة بشكل صحيح، يمنحك ذلك أكبر قدر من التحكّم في طريقة عرض محتوى النافذة على الشاشة.

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

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