- بناء الجملة:
<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: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 من عرض النشاط في ساحة مشاركات السياق الخاصة به، وذلك ضمن عملية أخرى.القيمة التلقائية لهذه السمة هي
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"
، ستتم إزالة جميع الأنشطة التي تعترف بها المستخدم، وهي في هذه الحالة "س"، عندما يشغِّل المستخدم النشاط 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 إلى نوع التنقل (كرة التتبع أو D-pad). ولا يحدث ذلك عادةً. "orientation"
تغيير في اتجاه الشاشة، مثل تدوير المستخدم للجهاز.
ملاحظة: إذا كان تطبيقك يستهدف Android 3.2 (مستوى واجهة برمجة التطبيقات 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: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 وShayder والكاميرا.
وينتج عن ذلك رسوم متحركة أكثر سلاسة وتمرير أكثر سلاسة وتحسين الاستجابة بشكل عام، حتى في التطبيقات التي لا تستخدم بشكل صريح مكتبات 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
، يمكنك الاطّلاع على المهام والحزمة الخلفية. android:lockTaskMode
- يحدد طريقة تقديم النظام لهذا النشاط عندما يكون الجهاز قيد التشغيل في
وضع مهمة القفل.
يمكن لنظام التشغيل Android تشغيل المهام بطريقة تفاعلية تشبه وضع Kiosk، ويُطلق عليها "وضع قفل المهام". عندما يعمل النظام في وضع قفل الشاشة، لا يمكن لمستخدمي الأجهزة عادةً الاطّلاع على الإشعارات أو الوصول إلى التطبيقات غير المدرَجة في القائمة المسموح بها أو العودة إلى الشاشة الرئيسية، إلّا إذا كان تطبيق Home مُدرجًا في القائمة المسموح بها.
لا يمكن تشغيل سوى التطبيقات المُدرَجة في القائمة المسموح بها من خلال وحدة التحكّم بسياسة الجهاز (DPC) عندما يكون النظام في وضع قفل المهام. ومع ذلك، يمكن أن يعمل النظام والتطبيقات المميزة في وضع قفل المهام بدون إدراجها في القائمة المسموح بها.
يمكن أن تكون القيمة أيًا من قيم سلسلة
R.attr.lockTaskMode
التالية:القيمة الوصف "normal"
القيمة التلقائية. هذه هي القيمة التلقائية. لا يتم تشغيل المهام في وضع قفل المهام ولكن يمكن وضعها هناك من خلال استدعاء startLockTask()
."never"
لا يتم تشغيل "مهام Google" في وضع
lockTask
، ولن يتمكّن مستخدم الجهاز من تثبيت هذه المهام من شاشة "العناصر الأخيرة".ملاحظة: لا يتوفّر هذا الوضع إلا لتطبيقات النظام والتطبيقات المميّزة. يتم التعامل مع التطبيقات غير المميزة التي تحمل هذه القيمة على أنها
normal
."if_whitelisted"
إذا سمحت وحدة التحكّم بسياسة الجهاز بهذه الحزمة باستخدام 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 من واجهة برمجة التطبيقات.
ملاحظة: يتم تطبيق قيمة النشاط الجذر للمهمة على جميع الأنشطة الإضافية التي تم تشغيلها في المهمة. ويعني ذلك أنّه إذا كان تغيير حجم النشاط الجذر لمهمة معيّنة، سيتعامل النظام مع جميع الأنشطة الأخرى في المهمة على أنها قابلة لتغيير الحجم. إذا تعذّر تغيير حجم النشاط الجذر، لن يكون بالإمكان تغيير حجم الأنشطة الأخرى في المهمة.
- الشاشات الكبيرة (sw >= 600dp): تتيح جميع التطبيقات وضع النوافذ المتعددة. وتشير
إلى ما إذا كان من الممكن تغيير حجم التطبيق، وليس إلى ما إذا كان التطبيق متوافقًا مع وضع النوافذ المتعددة. وإذا
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>
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2023-11-01 (حسب التوقيت العالمي المتفَّق عليه)
[]
[]