activity النشاط

الإعلانات

النشاط <activity>

 

activity النشاط <activity>

بناء الجملة:

<activity android:allowEmbedded=["true" | "false"]
          android:allowTaskReparenting=["true" | "false"]
          android:alwaysRetainTaskState=["true" | "false"]
          android:autoRemoveFromRecents=["true" | "false"]
          android:banner="drawable resource"
          android:clearTaskOnLaunch=["true" | "false"]
          android:colorMode=[ "hdr" | "wideColorGamut"]
          android:configChanges=["mcc", "mnc", "locale",
                                 "touchscreen", "keyboard", "keyboardHidden",
                                 "navigation", "screenLayout", "fontScale",
                                 "uiMode", "orientation", "density",
                                 "screenSize", "smallestScreenSize"]
          android:directBootAware=["true" | "false"]
          android:documentLaunchMode=["intoExisting" | "always" |
                                  "none" | "never"]
          android:enabled=["true" | "false"]
          android: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"]
          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>

الوصف:

يقوم بتعريف نشاط activity (فئة فرعية لنشاط) الذي يقوم بتنفيذ جزء من واجهة المستخدم المرئية للتطبيق.

جميع الأنشطة يجب أن يتم تمثيلها بعناصر <activity> في ملف الإيضاح. أي أنشطة لم يتم الإعلان عنها هناك، لن تُرى من قبل

النظام ولن يتم تشغيلها أبداً.

 

السمات:

android:allowEmbedded

تشير إلى أنه، يمكن إطلاق النشاط activity كتابع مضمن في نشاط آخر. خاصة، في الحالة التي يكون فيها التابع في حاوية، مثل العرض الذي يملكه نشاط آخر.

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

القيمة الإفتراضية لهذه السمة هي ” false”.

android:allowTaskReparenting

سواء كان بالإمكان إنتقال النشاط activity من المهمة التي بدأته إلى مهمة أخرى تقاربها أو لا.

عندما يتم جلب هذه المهمة إلى المقدمة – تأخذ القيمة “true” إذا أمكن إنتقالها، و تأخذ القيمة “false” إذا كان يجب أن تبقى في النشاط activity الذي بدأت معه.

إذا لم يتم تعيين هذه السمة، فإن القيمة التي تم تعيينها بواسطة السمة allowTaskReparenting التي تتوافق مع العنصر <application> سيتم تطبيقها على النشاط.

القيمة الإفتراضية هي “false”.

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

عادة ما يتم إستخدامها في نقل أنشطة activity التطبيق، إلى المهمة الرئيسية المرتبطة بهذا التطبيق.

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

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

 

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

تقارب الأنشطة يتم تعريفه من خلال سمة “تقارب المهام” taskAffinity.

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

في حين أن الأنشطة activity ذات المهمة الواحده “singleTask” أو ذات مثيل واحد “singleInstance” التي تقوم بوضع التشغيل لا يمكن أن تكون إلا في أصل المهمه، الإرفاق يقتصر على الوضعين القياسي “standard” و المفرد “singleTop“.

(راجع أيضاً سمة وضع التشغيل).

 

android:alwaysRetainTaskState

سواء كانت أو لم تكن، حالة المهمه التي يمارسها النشاط activity ستبقى دائماً محفوظة بواسطة النظام – تأخذ القيمة “true” إذا بقيت محفوظه.

وتأخذ القيمة “false” إذا سمح النظام بإعادة تعيين المهمة إلى حالتها الأولية، في حالات معينة.

القيمة الإفتراضية هي “false”. تكون هذه السمة ذات مغزى فقط للنشاط activity الأساسي للمهمه؛ يتم تجاهلها لجميع الأنشطة الأخرى.

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

 

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

المستخدم بزيارة المهمة لفترة من الزمن، مثلاً 30 دقيقه.

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

هذا مفيد، على سبيل المثال، في تطبيق، مثل المتصفح حيث يوجد الكثير من الحالات (مثل فتح علامات تبويب متعددة)

التي لا يرغب المستخدمون في فقدها.

 

android:autoRemoveFromRecents

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

إذا كانت القيمة ” true”، فستتم إزالة المهمة تلقائياً من شاشة المعاينه. هذا يتجاوز إستخدام الإستدعاء FLAG_ACTIVITY_RETAIN_IN_RECENTS. يجب أن تكون هذه السمة قيمة منطقية، إما “true” أو “false”.

 

android:banner

مصدر رسوميات يوفر، شعار رسومي موسع للعنصر المرتبط به. يستخدم مع وسم النشاط <activity> لتوفير شعار

إفتراضي لنشاط activity معين، أو يستخدم مع وسم التطبيق <application> لتوفير شعار لجميع أنشطة التطبيق.

يستخدم النظام شعار، لتمثيل تطبيق في الشاشة الرئيسية لتلفاز الأندرويد. بما أن الشعار يعرض فقط في الشاشة

الرئيسية، يجب تحديدها فقط بواسطة تطبيقات لها نشاط يتعامل مع غرض CATEGORY_LEANBACK_LAUNCHER.

يجب تعيين هذه السمة كإشارة مرجعية لمصدر رسومي يحتوي على الصورة (مثال، “drawable/banner@“). لا يوجد شعار إفتراضي.

 

لمزيد من المعلومات راجع توفير شعار للشاشة الرئيسية في “البدء مع تطبيقات التلفاز”.

 

android:clearTaskOnLaunch

سواء كانت أو لم تكن، جميع الأنشطة activity ستتم إزالتها من المهمة أم لا، بإستثناء النشاط الرئيسي.

كلما أعيد إطلاقها من الشاشة الرئيسية ـ تأخذ القيمة “true” إذا تم تجريد “تفكيك\إرجاع” المهمه دائماً إلى نشاطها الرئيسي، وتأخذ القيمة “false” إذا لم تكن كذلك.

القيمة الإفتراضية هي “false”.

 

تكون هذه السمة ذات مغزى فقط للأنشطة activity التي تبدأ بمهمة جديدة (النشاط الرئيسي)؛ تقوم بتجاهل جميع الأنشطة الأخرى في المهمه.

عندما تكون القيمة “true”، في كل مرة يبدأ فيها المستخدمون المهمة مجدداً، يتم نقلهم إلى نشاطها الأصلي بغض النظر عن آخر ما فعلوه في المهمه.

وبغض النظر عما إذا قاموا بضغط الزر “رجوع” أو زر “الشاشة الرئيسية” للمغادرة.

عندما تكون القيمة “false”، قد يتم مسح المهمة من الأنشطة activity في بعض الحالات ولكن ليس دائماً (راجع سمة alwaysRetainTaskState).

على سبيل المثال لنفترض، أن شخصاً ما قام بإطلاق النشاط “ج” من الشاشة الرئيسية، ومن هناك أنتقل إلى النشاط “ك”.

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

 

مع ذلك، إذا قام “ج” بتعيين هذه العلامة على “true”، فإن جميع الأنشطة الموجودة فوقه (في هذه الحالة النشاط “ك”)

سوف تتم إزالتها عندما يضغط المستخدم على زر “الشاشة الرئيسية” وستذهب المهمة إلى الخلف. لذلك يرى المستخدم فقط النشاط “ج” عند عودته للمهمه.

 

إذا كانت كلٍ من هذه السمة والسمة allowTaskReparenting تأخذان القيمة “true”، فإن أي أنشطة والتي يمكن إعادة

تأصيلها، سيتم نقلها إلى المهمة التي يتشاركون معها في التقارب؛ الأنشطة المتبقية سيتم إسقاطها، كما هو موضح أعلاه.

 

android:colorMode

يطلب من النشاط activity أن يتم عرضه في وضع التدرج اللوني العريض على الأجهزة المتوافقه. في وضع التدرج اللوني العريض، يمكن لنافذة أن تعرض نطاق “النظام اللوني المعياري SRGB” لعرض ألوان أكثر حيوية.

إذا كان الجهاز لا يدعم عرض النطاق اللوني العريض، فلن يكون لهذه السمة أي تأثير.

لمزيد من المعلومات حول العرض في وضع التدرج اللوني العريض، راجع تحسين الرسوميات بمحتوى الألوان العريضه.

 

android:configChanges

تدرج قوائم تغييرات التكوين التي سيتعامل معها النشاط activity بنفسه. عند تغير تكوينٍ ما أثناء وقت التشغيل، يتم إيقاف النشاط وإعادة تشغيله بشكلٍ إفتراضي.

ولكن الإعلان عن تغيير بإستخدام هذه السمه سيمنع إعادة تشغيل النشاط activity . بدلاً من ذلك، يبقى النشاط قيد التشغيل ويتم إستدعاء الداله الخاصة به ()onConfigurationChanged.

 

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

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

 

بواسطة الرمز ‘|‘ – مثال، “locale|navigation|orientation“.

  

القيمه الوصف
“density” الكثافه تغير كثافة العرض – ربما المستخدم قد حدد مقياس عرض مختلف، أو قد يكون هناك عرض مختلف، نشط الآن.

تمت إضافتها في المستوى API 24.

“fontScale” مقياس الخط تم تغيير عامل مقياس الخط – قام المستخدم بتحديد حجم خط عالمي، جديد.
“keyboard” لوحة المفاتيح

تم تغيير نوع لوحة المفاتيح – مثال، قام المستخدم بتوصيل لوحة مفاتيح خارجية.

“keyboardHidden” لوحة مفاتيح مخفيه إمكانية الوصول إلى لوحة المفاتيح تغيرت  – مثال، قام المستخدم بفتح لوحة المفاتيح الموجودة على الجهاز “هاردوير”.
“layoutDirection” إتجاه “المخطط\التنسيق” تم تغيير إتجاه المخطط – مثال، التغيير من اليسار إلى اليمين أو من اليمين إلى اليسار.

تمت إضافتها في المستوى API 17.

“locale” موقع

تم تغيير الإعدادات المحليه – قام المستخدم بإختيار لغة جديدة، ويجب عرض النص بإستخدامها.

“mmc” تم تغيير رمز البلد للمحمول، الخاص بـIMSI الجهاز – تم إكتشاف بطاقة SIM وتحديث MMC.
“mnc” تم تغيير رمز الشبكة للمحمول، الخاص بـIMSI الجهاز – تم إكتشاف بطاقة SIM وتحديث MNC.
“navigation” “تنقل\ملاحه” تم تغيير نوع التنقل (كرة تتبع\دي باد). (هذا يجب ألا يحدث عادة).
“orientation” إتجاه تم تغيير إتجاه الشاشه – قام المستخدم بتدوير الجهاز.
ملاحظة: إذا كان تطبيقك يستهدف أندرويد 3.2 (المستوى 13) أو أعلى، فيجب عليك أيضاً تعريف تكوين حجم الشاشة “screenSize“، لأنه يتغير أيضاً عند تبديل الجهاز بين الإتجاهين الرأسي والأفقي.
“screenLayout” مخطط الشاشه

تم تغيير مخطط الشاشة – قد يكون هناك عرض مختلف نشط الآن.

“screenSize” حجم الشاشة تم تغيير حجم الشاشة المتاح حالياً.

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

تمت إضافتها في المستوى API 13.

“smallestScreenSize” أصغر حجم للشاشه تم تغيير الحجم الفعلي “المادي” للشاشة.

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

تغيير هذا التكوين يتطابق مع تغيير تكوين “أصغر عرض” 

تمت إضافتها في مستوى API 13.

“touchscreen” شاشة اللمس تم تغيير شاشة اللمس. (هذا يجب ألا يحدث عادة).
“uiMode” وضع واجهة المستخدم تم تغيير وضع واجهة المستخدم – قام المستخدم بوضع الجهاز على حامل مكتب أو سيارة، أو تم تغيير الوضع الليلي.

لمزيد من المعلومات حول أوضاع واجهة المستخدم المختلفة، راجع إدارة أوضاع واجهة المستخدم.

تمت إضافتها في مستوى API 8.

 

 

جميع تغييرات التكوين هذه، يمكنها التأثير على قيم المصادر التي يراها التطبيق.

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

ملاحظه: للتعامل مع كافة تغييرات التكوين، المرتبطة بالنوافذ المتعدده، إستخدم كلٍ من “screenLayout” و “smallestScreenSize”.

تعدد النوافذ مدعوم في أندرويد 7.0 (المستوى 24) أو أعلى.

android:directBootAware

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

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

القيمة الإفتراضية هي “false”.

 

android:documentLaunchMode

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

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

 

القيمة الوصف
“intoExisting” يبحث النظام عن مهمة يتطابق “اسم المكون” و بيانات 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> يحتوي على سمة “مُمكن” الخاصة به التي تنطبق على جميع مكونات التطبيق، بما في ذلك الأنشطة.

يجب أن تعين سمتي <application> و <activity> كلاهما على القيمه “true” (مثلما هما إفتراضياً) لكي يتمكن النظام

من تمثيل النشاط. إذا تم تعيين أحدهما على “false”، فلا يمكن إنشاء مثيل له.

 

android:excludeFromRecents

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

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

تعين على القيمة “true” إذا كان يجب إستبعاد المهمة من القائمة؛ و تعين على “false” إذا توجب تضمين المهمة في القائمة.

القيمة الإفتراضية للسمه هي “false”.

android:exported

يحدد هذا العنصر ما إذا كان يمكن تشغيل النشاط بواسطة مكونات تطبيقات أخرى – يأخذ القيمة “true” إذا كان ذلك ممكناً،

ويأخذ القيمة “false” إذا لم يكن ممكناً.

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

إذا كنت تستخدم مرشحات الأغراض، فيجب عدم تعيين هذا العنصر على القيمة “false”.

 

إذا قمت بذلك، سيحاول التطبيق إستدعاء النشاط activity ، وسيقوم النظام بإلغاء ActivityNotFoundException.

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

 

إذا لم يكن لديك مرشحات غرض، فإن القيمة الإفتراضية لهذا العنصر هي “false”.

إذا قمت بتعيين العنصر على القيمة “true”، فسوف يسهل الوصول لهذا النشاط activity من أي تطبيق يعرف اسم فئته

بالضبط، ولكنه لن يعمل عندما يحاول النظام مطابقة غرض ضمني.

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

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

 

android:finishOnTaskLaunch

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

تأخذ القيمة “true” إذا توجب إيقاف تشغيلها، وتأخذ القيمة “false” إذا لم يتوجب إيقاف تشغيلها.

القيمة الإفتراضية هي “false”.

إذا تم تعيين هذه السمة والسمة allowTaskReparenting على القيمة “true”، فإن هذه السمة تتفوق على الأخرى.

ويتم تجاهل تقارب النشاط. لا يتم تمثيل هذا النشاط activity ، ولكن يتم تدميره.

 

android:hardwareAccelerated

سواء كان أو لم يكن، أداء تسارع الجهاز يجب تمكينه لهذا النشاط – يأخذ القيمة “true” إذا توجب تمكينه و يأخذ القيمة “false” إذا لم يتوجب تمكينه. القيمة الإفتراضية هي “false”.

بدءاً من أندرويد 3.0، توفر عارض تسارع الجهاز OpenGL للتطبيقات، لتحسين أداء العديد من عمليات الرسوميات ثنائية الأبعاد الشائعة.

عند تمكين عارض تسارع الجهاز، يتم تسريع معظم العمليات في Canvas, Paint, Xfermode, مرشح الألوان، التظليل، والكاميرا.

 

هذا يؤدي إلى جعل الحركة، والتمرير أكثر سلاسة، ويحسن الإستجابة بشكلٍ عام، حتى بالنسبة للتطبيقات التي لا تستخدم مكتبات إطار عمل OpenGL بشكلٍ مباشر.

نظراً لزيادة المصادر المطلوبة لتمكين التسريع، سيستهلك تطبيقك المزيد من ذاكرة الوصول العشوائي.

لاحظ أنه ليست جميع عمليات OpenGL الثنائية الأبعاد مسرعة.

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

 

android:icon

أيقونة تمثل النشاط. يتم عرض الأيقونة للمستخدمين عندما يكون تمثيل النشاط مطلوباً على الشاشة.

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

يجب تعيين هذه السمة كمرجع لمصدر رسوميات يحتوي على تعريف الصورة.

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

أيقونة النشاط – سواء تم تعيينها هنا أو بواسطة عنصر <application> – فهي أيضاً الأيقونة الإفتراضية لجميع مرشحات أغراض النشاط activity (راجع سمة أيقونة للعنصر <intent-filter>).

 

android:immersive

تقوم بضبط إعدادات الوضع المجسم للنشاط activity الحالي. إذا تم تعيين السمة على “true” في إدخال ملف إيضاح التطبيق لهذا النشاط.

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

android:label

مسمى المستخدم القابل للقراءة للنشاط. يتم عرض المسمى على الشاشة عندما يتوجب تمثيل النشاط للمستخدم.

غالباً ما يتم عرضه مصحوباً بأيقونة النشاط.

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

نشاط المسمى – سواء تم تعيينه هنا أو بواسطة عنصر <application> – فهو أيضاً المسمى الإفتراضي لكل مرشحات أغراض النشاط activity (راجع سمة مسمى العنصر <intent-filter>).

يجب تعيين المسمى كمرجع لمصدر سلسلة، بحيث يمكن ترجمتها كالسلاسل الأخرى في واجهة المستخدم.

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

 

android:launchMode

هي تعليمات حول كيفية بدء النشاط. هناك أربعة أوضاع تعمل بالتزامن مع أعلام النشاط (ثوابت FLAG_ACTIVITY_*).

في كائنات الغرض لتحديد ما يجب حدوثه عند إستدعاء النشاط للتعامل مع غرض. وهم:

standard
singleTop
singleTask
singleInstance

الوضع الإفتراضي هو “standard“.

 

كما هو موضح في الجدول أدناه، تنقسم الأوضاع إلى مجموعتين رئيسيتين، مع أنشطه “قياسيه” و “فردية” من جهه، وأنشطه “مهمة واحدة” و “مثيل واحد” من جهة أخرى.

النشاط بوضع “قياسيه” و “فردية” يمكن تمثيله عدة مرات.

المثيلات يمكن أن تنتمي لأي مهمة ويمكن أن توضع في أي مكان في حزمة النشاط.

عادة ما يتم تشغيلها في المهمة التي تسمى ()startActivity (إلا إذا أحتوى كائن الغرض على تعليمة FLAG_ACTIVITY_NEW_TASK.

 وفي هذه الحالة يتم إحتيار مهمة مختلفه – راجع سمة تقارب المهام).

في المقابل، أنشطة الوضع “مهمة واحدة” و “مثيل واحد” يمكنها فقط بدء مهمة واحدة. وتكونا دائماً في جزمة النشاط الأساسية.

 

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

 

وضعي “قياسيه” و “فردية” يختلفان عن بعضهما من ناحية واحدة: في كل مرة يكون هناك غرض جديد لنشاط “قياسيه”.

يتم إنشاء مثيل جديد للفئة للإستجابة مع ذلك الغرض.

كل مثيل يتعامل مع غرض واحد. وبالمثل، يمكن أيضاً إنشاء مثل للوضع “فردية” للتعامل مع غرض جديد.

مع ذلك، إذا كان لدى المهمة المستهدفة مثيل بالفعل في النشاط في أعلى حزمته.

فإن هذا المثيل سوف يتلقى الغرض الجديد (بإستدعاء ()onNewIntent)؛ لن يتم إنشاء مثيل جديد.

في حالات أخرى – مثال، إذا وجد مثيل للنشاط في الحالة “فردية” في المهمة المستهدفه، ولكنه ليس في أعلى حزمته.

أو إذا كان في أعلى الحزمة، ولكن ليس في المهمة المستهدفة – فسيتم إنشاء مثيل جديد ويدفع إلى الكومة.

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

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

الغرض المتنقل سوف يتم تلقيه بواسطة دالة النشاط الأصلي ()onNewIntent. إذا كان النشاط الأصلي يقوم بإطلاق وضع التشغيل “قياسي” (وكان الغرض العلوي لا يحتوي على FLAG_ACTIVITY_CLEAR_TOP).

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

 

وضعي “مهمة واحدة” و “مثيل واحد” يختلفان أيضاً عن بعضهما من ناحية واحدة: يسمح نشاط “مهمة واحدة” بأن تكون الأنشطة الأخرى جزءاً من مهمته.

وهو دائماً يتواجد في أصل مهمته، ولكن الأنشطة الأخرى ( الأنشطة الضرورية “قياسية” و “فردية“) يمكن بدء تشغيلهما في تلك المهمة.

من ناحية أخرى، نشاط “مثيل واحد” لا يسمح بأن تكون هناك أنشطه activity أخرى جزء من مهمته. وهو النشاط الوحيد في المهمه.

إذا بدأ نشاط آخر، فسيتم نقل ذلك النشاط إلى مهمة مختلفة – كما لو كان FLAG_ACTIVITY_NEW_TASK في الغرض.

حالات الإستخدام وضع الإطلاق مثيلات متعددة؟ التعليقات
إطلاق عادي لمعظم الأنشطة “standard” قياسي نعم الإفتراضية. يقوم النظام دائماً بإنشاء مثيل جديد، للنشاط الموجود في المهمة المستهدفه ويقوم بتوجيه الغرض إليه.
“singleTop”  مشروط

إذا كان يوجد مثيل للنشاط بالفعل، في أعلى المهمة المستهدفه.

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

إطلاق مخصص

(لا يوصى به للإستخدام العام)

“singleTask” مهمة واحدة لا يقوم النظام بإنشاء النشاط في أصل مهمة جديدة، ويقوم بتوجيه الغرض إليه. 

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

“singleInstance” مثيل واحد لا

بشكلٍ مشابه لـ”singleTask”، عدا أن النظام لا يقوم بإطلاق أي أنشطة أخرى في المهمة التي تحمل المثيل.

يكون النشاط دائماً هو العضو الوحيد فقط في مهمته.

 

كما هو موضح في الجدول أعلاه، يعتبر الوضع “قياسيه” هو الوضع الإفتراضي و هو مناسب لمعظم أنواع الأنشطه.

 

و الوضع “فردية” هو وضع بدء تشغيل شائع أيضاً، كما أنه مفيد لأنواع عديدة من الأنشطه.

أما الأوضاع الأخرى “مهمة واحدة” و “مثيل واحد” – تعتبران غير مناسبتان لمعظم التطبيقات.

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

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

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

 

android:lockTaskMode

يحدد كيف يقدم النظام هذا النشاط activity عندما يكون الجهاز قيد التشغيل في وضع “مهمة القفل”.

يمكن للأندرويد تشغيل المهام بطريقة غائره، شبيهة بطريقة الكشك تسمى “وضع مهمة القفل”. عندما يعمل النظام في وضع مهمة القفل.

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

العودة إلى الشاشة الرئيسية (ما لم يكن التطبيق في الشاشة الرئيسية مدرجاً في قائمة الإنتظار).

 

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

ومع ذلك، يمكن تشغيل النظام والتطبيقات ذات الإمتيازات في وضع “مهمة القفل” دون وضعهم في قائمة الإنتظار.

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

القيمه الوصف
“normal” عادي هذه هي القيمة الإفتراضية. لا يتم تشغيل المهام في وضع مهمة القفل لكن يمكن وضعها هناك من خلال إستدعاء ()startLockTask.
“never” أبداً

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

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

إذا لم يقم DPC بالسماح بهذه الحزمة، فإن هذا الوضع يكون مطابقاً “لعادي”.

“always” دائماً يتم دائماً إطلاق المهام المتجذرة في هذا النشاط، في وضع مهمة القفل. لو كان النظام بالفعل في وضع مهمة القفل عند إطلاق هذه المهمة، فإن المهمة الجديدة يتم إطلاقها في أعلى المهمة الحاليه.

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

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

تم تقديم هذه السمة في المستوى API 23.

android:maxRecents

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

القيم الصالحة هي من 1 إلى 50 (إلى 25 على الأجهزة ذات الذاكرة المنخفضة)؛ الصفر قيمة غير صالحه، يجب أن تكون هذه القيمة عدد صحيح، مثل 50. القيمة الإفتراضية هي 16.

 

android:maxAspectRatio

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

تاركاً أجزاء من الشاشة غير مستخدمة، بحيث يمكن تشغيل التطبيق عن الحد الأقصى لنسبة الجوانب المحددة.

يتم التعبير عن الحد الأقصى لنسبة الجوانب كصيغة عشريه للحاصل الأكبر للبعد الأطول للجهاز مقسوماً على بعده الأقصر.

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

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

ملاحظة: يتم تجاهل هذه السمة إذا كان النشاط لديه resizeableActivity تم تعيينها على “true”، طالما أن هذا يعني، أن نشاطك يدعم أي حجم.

لمزيد من المعلومات حول هذه السمة، راجع دعم الشاشات المتعددة.

 

android:multiprocess

ما إذا كان مثيل النشاط activity يمكن تشغيله في عملية المكون الذي بدأه أم لا – تأخذ القيمة “true” إذا أمكن تشغيله، و تأخذ القيمة “false” إذا لم يمكن ذلك.

القيمة الإفتراضية هي “false”.

عادة، يتم تشغيل مثيل جديد من النشاط activity في عملية التطبيق التي تقوم بتعريفه، بحيث يتم تشغيل كافة مثيلات النشاط في نفس العمليه.

مع ذلك، إذا تم تعيين هذه العلامة على “true”، فيمكن تشغيل مثيلات النشاط في عمليات متعددة.

مما يسمح للنظام بإنشاء مثيلات أينما يتم إستخدامها (بشرط أن يتم السماح بالأذونات)، وهو شيء تقريباً غير ضروري أو مرغوب.

 

android:name

اسم الفئة التي تقوم بإجراء النشاط، فئة فرعية من النشاط. قيمة السمة يجب أن تكون اسم فئة مؤهل بالكامل (مثل، “com.example.project.ExtracurricularActivity“).

مع ذلك، كإختصار، إذا كان الحرف الأول من الأسم نقطة (مثال، “ExtracurricularActivity.“)، فسيتم إضافتها إلى اسم الحزمة المحدد في عنصر الإيضاح <manifest>.

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

 

android:noHistory

سواء كان أو لم يكن، يجب إزالة النشاط من حزمة النشاط activity ويتم إنهاؤه (بإستدعاء دالة الإنهاء الخاصة به ()finish ) عندما ينتقل المستخدم بعيداً عنه ولم يعد مرئياً على الشاشة.

تأخذ القيمة “true” إذا توجب أن ينتهي، وتأخذ القيمة “false” إذا لم يتوجب أن ينتهي.

القيمة الإفتراضية هي “false”.

القيمة “true” تعني أن النشاط لن يترك آثار. لن يبقى في كومة النشاط للمهمة، لذا لن يكون بمقدور المستخدم العودة إليه.

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

تم تقديم هذه السمة في API 3

android:parentActivityName

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

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

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

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

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

تم تقديم هذه السمة في المستوى API 16.

 

android:persistableMode

يحدد كيفية الحفاظ على مثيل لنشاط ما بداخل مهمة إحتواء، أثناء إعادة تشغيل الجهاز.

إذا كان النشاط الرئيسي لمهمة قد قام بتعيين قيمة هذه السمة على persistRootOnly، عندها فقط سيتم الحفاظ على النشاط activity الرئيسي.

خلاف ذلك، يتم فحص الأنشطة الأعلى في مهمة الكومة الخلفية؛ يتم الحفاظ على أي من هذه الأنشطة التي قامت بتعيين قيمة هذه السمة إلى persistAcrossReboots.

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

جدول 5

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

عندما يقوم تطبيقك بتشغيل غرض يحمل نشاط تطبيقك الأساسي، لا يتلقى النشاط كائن PersistableBundle.

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

ملاحظة: تؤثر قيمة هذه السمة على سلوك تطبيقك، فقط لو تم تعيينها على النشاط الأساسي للتطبيق.
persistAcrossReboots يتم الإحتفاظ بحالة النشاط هذه، بالإضافة إلى حالة كل نشاط ذو مستوى أعلى في الكومة الخلفيه وله سمة persistableMode خاصة به، تم تعيينها على persistAcrossReboots.

إذا لم يكن للنشاط سمة persistableMode ، تم تعيينها على 

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

لو قام الغرض بتحميل نشاط تم تعيين سمة persistableMode الخاصة به على  persistAcrossReboots في تطبيقك، فسوف يتلقى النشاط كائن PersistableBundle في دالة الإنشاء ()onCreate الخاصة به.

لذا، يمكنك إستخدام ()onSaveInstanceState للإحتفاظ بحالة النشاط خلال إعادة تشغيل الجهاز، طالما تم تعيين سمة persistableMode الخاصة به على persistAcrossReboots.

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

تم تقديم هذه السمة في المستوى API 21. 

 

android:permission

اسم الأذن التي يجب أن تكون لدى العملاء لبدء تشغيل النشاط أو جعله يستجيب إلى غرض.

إذا كان إستدعاء ()startActivity أو ()startActivityForResult لم يمنح الإذن المحددة، فلن يتم تسليم غرضه إلى النشاط.

إذا لم يتم تعيين هذه السمة، فإن الأذونات المعينة بواسطة سمة أذونات العنصر <application> تطبق على النشاط.

إذا لم يتم تعيين أي سمة، فإن النشاط لن يكون محمي بواسطة الأذونات.

لمزيد من المعلومات عن الأذونات، انظر قسم الأذونات في المقدمة و مستندات أخرى، الأمان و الأذونات.

android:process

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

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

إذا كان الاسم الذي تم تعيينه لهذا السمة يبدأ بنقطتين رأسيتين (‘:’)، فإن عملية جديدة خاصة للتطبيق،

سيتم إنشاؤها عند الحاجة إليها وسيتم تشغيل النشاط في تلك العملية.

 

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

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

يمكن لسمة عملية عنصر <application> تعيين اسم عملية إفتراضي مختلف لجميع المكونات.

 

android:relinquishTaskIdentity

سواء كان أم لا، يتخلى النشاط عن معرفات المهام الخاصة به لنشاط فوقه في كومة المهام.

المهمة التي نشاطها الرئيسي لديه هذه السمة معينة على “true” تحل محل الغرض الأساسي للنشاط التالي في المهمه.

إذا كان النشاط التالي يحتوي أيضاً على هذه السمة وقد تم تعيينها إلى “true”، فسوف يقوم بإعطاء الغرض الأساسي لأي نشاط يبدأ تشغيله في نفس المهمه.

يستمر هذا لكل نشاط حتى يصل إلى نشاط تم تعيين هذه السمة فيه على القيمة “false”.

القيمة الإفتراضية هي “false”.

هذه السمة المعينة على “true” تسمح أيضاً للنشاط بإستخدام ActivityManager.TaskDescription لتغيير المسميات، الألوان، الأيقونات، في شاشة المعاينه.

resizeableActivity

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

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

إذا قمت بتعيين السمة على خطأ ” false”، فإن النشاط لن يدعم وضع النوافذ المتعددة.

 

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

إذا كان تطبيقك يستهدف المستوى API 24 أو أعلى، ولكنك لم تقم بتعيين قيمة لهذه السمة، فإن قيمة السمة ستكون القيمة الإفتراضية ” true”.

تمت إضافة هذه السمة في المستوى API 24. 

 

android:screenOrientation

إتجاه عرض النشاط على الجهاز. يتجاهل النظام هذه السمة إذا تم تشغيل النشاط في الوضع متعدد النوافذ.

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

جدول 6

“unspecified” غير محدد القيمة الإفتراضية. يقوم النظام بإختيار الإتجاه. السياسة التي تستخدمها، وبالتالي الخيارات التي تتم في حالات معينه، قد تختلف من جهاز إلى آخر.
“behind” وراء يأخذ نفس إتجاه النشاط، الموجود أسفله مباشرة، في كومة النشاط.
“landscape” أفقي

الإتجاه الأفقي (العرض أكبر من الطول).

“portrait” رأسي الإتجاه الرأسي (الطول أكبر من العرض).
“reverseLandscape” الأفقي المعاكس الإتجاه الأفقي في الإتجاه المعاكس للإتجاه الأفقي الطبيعي. تمت إضافتها في المستوى API 9.
“reversePortrait” الرأسي المعاكس الإتجاه الرأسي في الإتجاه المعاكس للإتجاه الرأسي الطبيعي. تمت إضافتها في المستوى API 9.
“sensorLandscape” الأفقي المستشعر

الإتجاه الأفقي، ولكن يمكن أن يكون أفقي طبيعي أو عكسي، بناءً على مستشعر الجهاز.

يتم إستخدام المستشعر حتى لو قام المستخدم بقفل تغيير الإتجاه بناءً على المستشعر. تمت إضافتها في المستوى API 9.

“sensorPortrait” الرأسي المستشعر الإتجاه الرأسي، ولكن يمكن أن يكون رأسي طبيعي أو عكسي، بناءً على مستشعر الجهاز.

يتم إستخدام المستشعر حتى لو قام المستخدم بقفل تغيير الإتجاه بناءً على المستشعر. تمت إضافتها في المستوى API 9.

“userLandscape” أفقي المستخدم الإتجاه الأفقي، ولكن يمكن أن يكون إما أفقي طبيعي أو عكسي، بناءً على مستشعر الجهاز و تفضيل المستخدم. تمت إضافتها في المستوى API 18.
“userPortrait” رأسي المستخدم الإتجاه الرأسي، ولكن يمكن أن يكون إما رأسي طبيعي أو عكسي، بناءً على مستشعر الجهاز و تفضيل المستخدم. تمت إضافتها في المستوى API 18.
“sensor” المستشعر

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

مع ذلك، بعض الأجهزة لن يتم تدويرها إلى كافة الإتجاهات الأربعه المحتمله إفتراضياً. للسماح بكافة الإتجاهات الأربعه، إستخدم “fullSensor” يتم إستخدام المستشعر حتى لو قام المستخدم بقفل الدوران المستند على المستشعر.

“fullSensor” المستشعر الكامل يتم تحديد الإتجاه بواسطة مستشعر الإتجاه الخاص بالجهاز لكلٍ من الإتجاهات الأربعه.

هذا مشابه لـ”المستشعر”، إلا أنه يسمح بأي من إتجاهات الشاشة الأربعة المحتمله،بغض النظر عما سيفعله الجهاز عادة (مثال، بعض الأجهزة لا تستخدم عادة الأفقي المعاكس والرأسي المعاكس، ولكن هذه القيمة تتيح هذين الإتجاهين).

تمت إضافتها في المستوى API 9.

“nosensor” بلا مستشعر يتم تحديد الإتجاه بدون الرجوع إلى المستشعر المادي للجهاز. يتم تجاهل المستشعر، لذا لن يتم تدوير الشاشة بناءً على كيفية تحريك المستخدم للجهاز.
“user” المستخدم

الإتجاه الحالي المفضل للمستخدم.

“fullUser” المستخدم الكامل إذا قام المستخدم بقفل الدوران المستند على المستشعر، فإن هذه القيمة تتصرف بشكلٍ مشابه لقيمة “المستخدم”.

خلاف ذلك، تتصرف بشكلٍ مشابه لـ”المستشعر الكامل” وتسمح بأي من الإتجاهات الأربعة المحتمله.

تمت إضافتها في المستوى API 18.

“locked” مقفل قفل الإتجاه على الدوران الحالي، مهما كان.

تمت إضافتها في المستوى API 18.

 

 

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

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

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

مع ذلك، يجب عليك أن تعلن أيضاً أن تطبيقك يتطلب إما إتجاهاً رأسياً أو أفقياً بإستخدام عنصر <uses-feature>.

مثال، إستخدام ميزة

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

 

android:showForAllUsers

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

يمكنك تعيين هذه السمة إلى قيمة حرفية – “true” أو “false” – أو يمكنك تعيين السمة إلى مصدر أو إلى سمة ثيم تحتوي على قيمة منطقية.

تمت إضافة هذه السمة في المستوى API 23.

 

android:stateNotNeeded

سواء كان أو لم يكن، يمكن إيقاف النشاط وإعادة تشغيله بنجاح من دون حفظ حالته – تأخذ القيمة “true” إذا أمكن إعادة تشغيله دون الرجوع إلى حالته السابقه، وتأخذ القيمة “false” إذا كانت حالته السابقة مطلوبه.

القيمة الإفتراضية هي “false”.

عادة، قبل التوقف المؤقت للنشاط ليتم حفظ المصادر، يتم إستدعاء دالته ()onSaveInstanceState.

هذه الداله تخزن الحاله الحالية للنشاط في كائن الحزمة، والتي يتم تمريرها بعد ذلك في دالة الإنشاء ()onCreate عندما تتم إعادة تشغيل النشاط.

إذا تم تعيين هذه السمة على “true”، قد لا يتم إستدعاء ()onSaveInstanceState و ()onCreate سيتم تمريرها

فارغة بدلاً من الحزمة – تماماً كما كانت عند التشغيل لأول مرة.

 

الإعداد “true” يضمن إمكانية إعادة تشغيل النشاط في حالة عدم الإحتفاظ بالحاله.

مثال، يستخدم النشاط الذي يعرض الشاشة الرئيسية هذا الإعداد للتأكد من عدم إزالته في حالة تعطله لأي سبب.

 

supportsPictureInPicture

يحدد ما إذا كان النشاط يدعم عرض صورة داخل صورة. يتجاهل النظام هذه السمة إذا كان android:resizeableActivity معين على القيمة ” false”.

تم إضافة هذه السمة في المستوى API 24.

 

android:taskAffinity

المهمة التي يكون للنشاط صلة بها. تنتمي الأنشطة التي لها نفس الصلة بشكلٍ نظري إلى نفس المهمه (إلى نفس “التطبيق” من منظور المستخدم).

يتم تحديد تقارب المهمه من خلال تقارب النشاط الرئيسي لها.

يحدد التقارب شيئين – المهمة التي يتم إعادة إنشاء النشاط لها (راجع سمة allowTaskReparenting).

والمهمة التي تستضيف النشاط عند بدء تشغيله بإستخدام العلامة FLAG_ACTIVITY_NEW_TASK.

بشكلٍ إفتراضي، كل الأنشطة في تطبيق ما، لها نفس الصله “التقارب”.

 

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

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

إذا لم يتم تعيين هذه السمة، يرث النشاط مجموعة التقارب للتطبيق (راجع سمة taskAffinity للعنصر <application>).

اسم التقارب الإفتراضي للتطبيق هو اسم الحزمة المعين بواسطة عنصر الإيضاح <manifest>.

 

android:theme

مرجع إلى مصدر تصميم يحدد مظهر “ثيم” عام للنشاط. يقوم هذا تلقائياً بتعيين سياق النشاط لإستخدام هذا الثيم.

(راجع ()setTheme، وربما قد تسبب أيضاً “بدء” حركة مسبقة للنشاط الذي تم تشغيله (لمطابقة أفضل لما يبدو عليه النشاط بالفعل).

إذا لم يتم تعيين هذه السمة، سيرث النشاط المظهر المعين للتطبيق ككل – من سمة ثيم العنصر <application>.

إذا لم يتم أيضاً تعيين هذه السمة، فسيتم إستخدام المظهر الإفتراضي للنظام. لمزيد من المعلومات، راجع دليل مطوري التصاميم و الثيمات.

 

android:uiOptions

خيارات إضافية لواجهة مستخدم النشاط.

يجب أن تكون واحدة من القيم التاليه:

جدول 7

القيمه الوصف
“none” لا شيء لا توجد خيارات إضافية لواجهة المستخدم. هذه هي القيمة الإفتراضيه.
“splitActionBarWhenNarrow”  تقوم بإضافة شريط في الجزء السفلي من الشاشة، لعرض عناصر الإجراء في شريط التطبيق (المعروف أيضاً بأسم شريط الإجراءات).

عندما تكون مقيدة بالمساحة الأفقيه، (مثلما، عندما تكون في الوضع الرأسي على الهاتف).

بدلاً من ظهور عدد صغير من الإجراءات في شريط التطبيق، في أعلى الشاشه، ينقسم شريط التطبيق إلى، قسم التنقل العلوي و الشريط السفلي لعناصر الإجراء.

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

لا يتم تقسيم عناصر القائمة إلى شريطين؛ هما يظهران دائماً معاً.

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

تمت إضافة هذه السمة في المستوى API 14.

 

android:windowSoftInputMode

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

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

يجب أن تكون الإعدادت واحدة من القيم المدرجة في الجدول التالي، أو مزيج من قيمة “حالة...” بالإضافة إلى قيمة “ضبط...“.

تعيين عدة قيم في أي مجموعة – عدة قيم “حالة...“، مثال، لديها نتائج غير محددة. يتم فصل القيم الفردية بواسطة الرمز (|) مثال:

القيم المحددة هنا (بخلاف قيم حالة “stateUnspecified” و قيم ضبط “adjustUnspecified“) تتجاوز القيم التي تم تعيينها في الثيم.

جدول 8

القيمة الوصف
“stateUnspecified” حالة غير محددة حالة لوحة المفاتيح “للنظام” غير محددة ( سواء كانت مخفيه أو مرئيه). سوف يختار النظام حالة مناسبه، أو يعتمد على إعدادات الثيم.

هذا هو الإعداد الإفتراضي لسلوك لوحة المفاتيح المضمنه في نظام الجهاز.

“stateUnchanged” حالة بلا تغيير يتم الإحتفاظ بحالة لوحة المفاتيح الأخيرة أياً كانت، سواء مرئيه أو مخفيه، عندما يأتي النشاط للمقدمه.
“stateHidden” إخفاء الحاله لوحة المفاتيح تكون مخفية عندما يختار المستخدم النشاط – أي عندما ينتقل المستخدم إلى النشاط بشكلٍ إيجابي، بدلاً من العودة إليه بسبب مغادرة نشاط آخر.
“stateAlwaysHidden” إخفاء الحالة دائماً لوحة المفاتيح مخفية دائماً، عندما تكون نافذة النشاط الرئيسي لديها إدخالات في حالة تركيز.
“stateVisible” الحالة مرئية

تكون لوحة المفاتيح مرئية عندما يكون ذلك ملائماً عادة (عندما ينتقل المستخدم للنافذة الرئيسية للنشاط).

“stateAlwaysVisible” الحالة مرئية دائماً تجعل لوحة المفاتيح مرئية عندما يختار المستخدم النشاط – أي عندما ينتقل المستخدم بشكلٍ إيجابي إلى النشاط، بدلاً من العودة إليه بسبب مغادرة نشاط آخر.
“adjustUnspecified” ضبط غير محدد لا يحدد ما إذا كانت النافذة الرئيسية للنشاط، يتغير حجمها لإتاحة مساحة للوحة المفاتيح، أو ما إذا كانت محتويات النافذه مثبته لتجعل التركيز الحالي مرئياً على الشاشة. 

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

إذا كانت هناك عروض مماثله، سيتم تغيير حجم النافذه، على إفتراض أن التمرير بإمكانه جعل كافة محتويات النافذة مرئية في مساحة صغيرة.

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

“adjustResize” ضبط التحجيم

يتم دائماً تغيير حجم النافذة الرئيسية للنشاط، لإفساح المجال لظهور لوحة المفاتيح على الشاشه.

“adjustPan” تثبيت الضبط لا يتم تغيير حجم النافذة الرئيسية للنشاط، لإفساح مجال لظهور لوحة المفاتيح، بدلاً من ذلك، يتم تثبيت محتويات الإطار تلقائياً، بحيث لا تقوم لوحة المفاتيح بحجب التركيز الحالي، ويتمكن المستخدمين دائماً من رؤية ما يكتبونه.

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

تم تقديم هذه السمة في المستوى API 3.

 

قدمت في:

المستوى API 1 لجميع السمات بإستثناء noHistory و windowSoftInputMode، اللتان تم إضافتهما في المستوى API 3.

راجع أيضاً:

<application>

<activity-alias>

 


 

للإطلاع على المقال باللغة الإنجليزية أضغط هنا.

الإعلانات

13 thoughts on “activity النشاط”

اترك رد