- תחביר:
<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: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: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:process="string" 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>- תיאור:
- מצהיר על פעילות (מחלקת משנה של
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. הבאנר מוצג רק במסך הבית, ולכן הוא מצוין רק על ידי אפליקציות עם פעילות שמטפלת ב-intent
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"שינוי בצפיפות התצוגה, למשל כשהמשתמש מציין קנה מידה שונה לתצוגה או כשתצוגה אחרת פעילה עכשיו.
נוסף ברמת API 24.
"fontScale"שינוי בפקטור של שינוי הגודל של הגופן, למשל כשהמשתמש בוחר גודל גופן גלובלי חדש. "fontWeightAdjustment"השתנה סכום העלייה במשקל הגופן. "grammaticalGender"המגדר הדקדוקי של השפה השתנה. מידע נוסף זמין במאמר בנושא GrammaticalInflectionManager.נוסף ברמת API 34.
"keyboard"שינוי בסוג המקלדת, למשל כשמשתמש מחבר מקלדת חיצונית. "keyboardHidden"שינוי בנגישות של המקלדת, למשל כשהמשתמש חושף את מקלדת החומרה. "layoutDirection"שינוי כיוון הפריסה, למשל משמאל לימין (LTR) לימין לשמאל (RTL).
נוסף ברמת API 17.
"locale"שינוי הלוקאל, למשל כשמשתמש בוחר שפה חדשה שבה הטקסט יוצג. "mcc"שינוי בקוד מדינה של רשת סלולרית (MCC) של ה-IMSI לנייד כשמזוהה כרטיס SIM שמעדכן את ה-MCC. "mnc"שינוי בקוד הרשת הסלולרית (MNC) של IMSI כשמזוהה כרטיס SIM שמעדכן את ה-MNC. "navigation"שינוי סוג הניווט (כדור עקיבה או כפתורי החיצים (D-pad)). בדרך כלל זה לא קורה. "orientation"שינוי בכיוון המסך, למשל כשהמשתמש מסובב את המכשיר.
הערה: אם האפליקציה מיועדת ל-Android 3.2 (רמת API 13) ומעלה, צריך להצהיר גם על ההגדרות
"screenLayout"ו-"screenSize", כי פריסת המסך וגודל המסך יכולים להשתנות כשמכשיר עובר בין מצב לאורך למצב לרוחב."screenLayout"שינוי בפריסת המסך, למשל כשמסך אחר הופך לפעיל. "screenSize"שינוי בגודל המסך הנוכחי שזמין.
הערך הזה מייצג שינוי בגודל הזמין כרגע, ביחס ליחס הגובה-רוחב הנוכחי, ולכן הוא משתנה כשהמשתמש עובר בין מצב לרוחב למצב לאורך.
נוסף ברמת API 13.
"smallestScreenSize"שינוי בגודל המסך הפיזי.
הערך הזה מייצג שינוי בגודל, ללא קשר לכיוון, ולכן הוא משתנה רק כשגודל המסך הפיזי משתנה, למשל כשעוברים למסך חיצוני. שינוי בהגדרה הזו תואם לשינוי בהגדרה של
smallestWidth.נוסף ברמת API 13.
"touchscreen"שינוי במצב מסך המגע, למשל כשמשתמש מחבר או מנתק ציוד היקפי לקלט או מעביר את האפליקציה בין מסכים שונים. "uiMode"שינוי במצב ממשק המשתמש, למשל כשמשתמש מניח את המכשיר במעמד שולחני או במעמד לרכב, או כשמצב הלילה משתנה. מידע נוסף על מצבי ממשק המשתמש השונים זמין במאמר UiModeManager.נוספה ברמת API 8.
כל השינויים האלה בהגדרות יכולים להשפיע על ערכי המשאבים שמוצגים באפליקציה. לכן, כשקוראים ל-
onConfigurationChanged(), בדרך כלל צריך לאחזר מחדש את כל המשאבים, כולל פריסות של תצוגות ומשאבי ציור, כדי לטפל בשינוי בצורה נכונה.הערה: כדי לטפל בשינויים בהגדרות שקשורים לריבוי חלונות, צריך להשתמש גם ב-
"screenLayout"וגם ב-"smallestScreenSize". ריבוי חלונות נתמך ב-Android מגרסה 7.0 (רמת API 24) ואילך. android:directBootAwareהאם הפעילות מודעת להפעלה ישירה – כלומר, האם היא יכולה לפעול לפני שהמשתמש פותח את נעילת המכשיר.
הערה: במהלך הפעלה ישירה, פעילות באפליקציה יכולה לגשת רק לנתונים שמאוחסנים באחסון מוגן במכשיר.
ערך ברירת המחדל הוא
"false".android:documentLaunchMode- מציין איך מופע חדש של פעילות מתווסף למשימה בכל פעם שהיא מופעלת.
המאפיין הזה מאפשר למשתמש להציג כמה מסמכים מאותה אפליקציה במסך הפריטים האחרונים.
למאפיין הזה יש ארבעה ערכים, שמפיקים את ההשפעות הבאות כשהמשתמש פותח מסמך באמצעות האפליקציה:
ערך תיאור "intoExisting"המערכת מחפשת משימה ש-Base Intent שלה ComponentNameו-Data URI תואמים לאלה של ה-Intent שמופעל. אם המערכת מוצאת משימה כזו, היא מנקה את המשימה ומפעילה מחדש את המכשיר, והפעילות הבסיסית מקבלת קריאה ל-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כדי להשבית את האנימציות של חיזוי החזרה ברמת הפעילות, ומנחים את המערכת להתעלם מקריאות ל-API של פלטפורמתOnBackInvokedCallback.android:excludeFromRecentsהאם המשימה שהופעלה על ידי הפעילות הזו לא נכללת ב מסך הפריטים האחרונים. כלומר, אם הפעילות הזו היא פעילות הבסיס של משימה חדשה, המאפיין הזה קובע אם המשימה תופיע ברשימת האפליקציות האחרונות. הערך הוא
"true"אם המשימה לא נכללת ברשימה, ו-"false"אם היא נכללת. ערך ברירת המחדל הוא"false".android:exportedהאם רכיבים של אפליקציות אחרות יכולים להפעיל את הפעילות:
- אם
"true", הפעילות נגישה לכל אפליקציה, ואפשר להפעיל אותה לפי שם המחלקה המדויק שלה. - אם הערך הוא
"false", אפשר להפעיל את הפעילות רק על ידי רכיבים של אותה אפליקציה, אפליקציות עם אותו מזהה משתמש או רכיבי מערכת עם הרשאות. זהו ערך ברירת המחדל כשאין מסנני כוונות.
אם פעילות באפליקציה שלכם כוללת מסנני Intent, צריך להגדיר את הרכיב הזה לערך
"true"כדי לאפשר לאפליקציות אחרות להפעיל אותה. לדוגמה, אם הפעילות היא הפעילות הראשית של האפליקציה וכוללת אתcategoryandroid.intent.category.LAUNCHER.אם הרכיב הזה מוגדר ל-
"false"ואפליקציה מנסה להפעיל את הפעילות, המערכת מציגהActivityNotFoundException.המאפיין הזה הוא לא הדרך היחידה להגביל את החשיפה של פעילות לאפליקציות אחרות. ההרשאות משמשות גם להגבלת הישויות החיצוניות שיכולות להפעיל את הפעילות.
permission- אם
android:finishOnTaskLaunch- האם מופסקת פעילות קיימת של המשימה, למעט פעילות השורש, כשהמשתמש מפעיל מחדש את המשימה על ידי בחירת המשימה במסך הבית. אם המכשיר כבוי, כותבים
"true". אם הוא לא כבוי, כותבים"false". ערך ברירת המחדל הוא"false".אם המאפיין הזה וגם המאפיין
allowTaskReparentingמוגדרים כ-"true", המאפיין הזה גובר על השני. המערכת מתעלמת מהזיקה של הפעילות. הפעילות לא משויכת מחדש לאב, אלא נהרסת.המערכת מתעלמת מהמאפיין הזה אם לא מוגדר
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED. android:hardwareAccelerated- האם העיבוד מואץ באמצעות חומרה בפעילות הזו.
"true"אם היא מופעלת, ו-"false"אם לא. ערך ברירת המחדל הוא"false".ב-Android מגרסה 3.0 ואילך, יש אפשרות להשתמש במעבד OpenGL עם האצת חומרה באפליקציות כדי לשפר את הביצועים של פעולות גרפיקה דו-ממדיות נפוצות רבות. כשמעבד התצוגה שמואץ על ידי חומרה מופעל, רוב הפעולות ב-Canvas, Paint, Xfermode, ColorFilter, Shader ו-Camera מואצות.
כתוצאה מכך, האנימציות והגלילה חלקות יותר, והתגובה הכוללת משופרת, גם באפליקציות שלא משתמשות באופן מפורש בספריות OpenGL של המסגרת. בגלל הגידול במשאבים שנדרשים כדי להפעיל האצת חומרה, האפליקציה צורכת יותר RAM.
לא כל הפעולות של OpenGL 2D מואצות. אם מפעילים את רכיב ה-Renderer עם האצת חומרה, צריך לבדוק אם האפליקציה יכולה להשתמש ברכיב ה-Renderer בלי שגיאות.
android:iconסמל שמייצג את הפעילות. הסמל מוצג למשתמשים כשנדרש ייצוג של הפעילות במסך. לדוגמה, סמלים של פעילויות שמתחילות משימות מוצגים בחלון של מרכז האפליקציות. לרוב, הסמל מופיע לצד תווית. מידע על התווית מופיע במאפיין
android:label.המאפיין הזה מוגדר כהפניה למשאב של ציור שמכיל את הגדרת התמונה. אם לא מוגדר סמל, המערכת משתמשת בסמל שצוין לאפליקציה כולה. מידע נוסף זמין במאמר בנושא מאפיין
iconשל רכיב<application>.הסמל של הפעילות, בין אם הוא מוגדר כאן או באמצעות רכיב
<application>, הוא גם סמל ברירת המחדל לכל מסנני הכוונות של הפעילות. מידע נוסף זמין במאמר בנושא מאפייןiconשל רכיב<intent-filter>.android:immersive- מגדיר את ההגדרה של מצב ההפעלה המלאה לפעילות הנוכחית. אם הערך הוא
"true", הביטActivityInfo.flagsשל החבר תמיד מוגדר, גם אם מצב התצוגה התלת-ממדית משתנה בזמן הריצה באמצעות השיטהsetImmersive().FLAG_IMMERSIVE android:labelתווית של הפעילות שקלה לקריאה על ידי המשתמש. התווית מוצגת על המסך כשהפעילות מיוצגת למשתמש. הוא מוצג לעיתים קרובות לצד סמל הפעילות. אם לא מגדירים את המאפיין הזה, המערכת משתמשת בתווית שהוגדרה לאפליקציה כולה. אפשר לעיין במאפיין
labelשל הרכיב<application>.התווית של הפעילות, בין אם היא מוגדרת כאן או באמצעות הרכיב
<application>, היא גם התווית שמוגדרת כברירת מחדל לכל מסנני הכוונות של הפעילות. מידע נוסף זמין במאמר בנושא מאפייןlabelשל רכיב<intent-filter>.התווית מוגדרת כהפניה למשאב מחרוזת, כדי שאפשר יהיה לבצע לוקליזציה שלה כמו למחרוזות אחרות בממשק המשתמש. עם זאת, כדי שיהיה לכם נוח יותר בזמן פיתוח האפליקציה, אפשר להגדיר אותו גם כמחרוזת גולמית.
android:launchModeהוראה להפעלת הפעילות. יש חמישה מצבים, שפועלים בשילוב עם דגלי פעילות (קבועים של
FLAG_ACTIVITY_*) באובייקטים שלIntentכדי לקבוע מה קורה כשקוראים לפעילות לטפל ב-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"כדי לטפל ב-Intent חדש.עם זאת, אם למשימה של היעד כבר יש מופע קיים של הפעילות בראש המחסנית שלה, המופע הזה מקבל את הכוונה החדשה, בקריאה ל-
onNewIntent(). לא נוצר מופע חדש. אחרת – אם מופע קיים של הפעילות"singleTop"נמצא במשימת היעד אבל לא בראש הסטאק, או אם הוא בראש הסטאק אבל לא במשימת היעד – נוצר מופע חדש והוא נדחף לסטאק.באופן דומה, אם המשתמש עובר למעלה לפעילות במחסנית הנוכחית, ההתנהגות נקבעת לפי מצב ההפעלה של פעילות האב. אם לפעילות ההורה יש מצב הפעלה
singleTop(או שה-intentupמכילFLAG_ACTIVITY_CLEAR_TOP), ההורה מועבר לראש המחסנית והמצב שלו נשמר.כוונת הניווט מתקבלת על ידי השיטה
onNewIntent()של פעילות האב. אם הפעילות הראשית היא במצב הפעלהstandard, והכוונהupלא מכילה אתFLAG_ACTIVITY_CLEAR_TOP, הפעילות הנוכחית והפעילות הראשית שלה יוצאות מהמחסנית, ונוצר מופע חדש של הפעילות הראשית כדי לקבל את כוונת הניווט.מצב
"singleInstance"שונה ממצבי ההפעלה"singleTask"ו-"singleInstancePerTask"רק בהיבט אחד: פעילות עם מצב הפעלה"singleTask"או"singleInstancePerTask"מאפשרת לפעילויות אחרות, בהכרח פעילויות"standard"ו-"singleTop", להיות חלק מהמשימה שלה.לעומת זאת, פעילות מסוג A
"singleInstance"לא מאפשרת לפעילויות אחרות להיות חלק מהמשימה שלה. זו חייבת להיות הפעילות היחידה במשימה. אם הוא מתחיל פעילות אחרת, הפעילות הזו משויכת למשימה אחרת, כאילוFLAG_ACTIVITY_NEW_TASKהיה בכוונת המשתמש.תרחישים לדוגמה מצב הפעלה כמה מקרים? תגובות השקות רגילות לרוב הפעילויות "standard"כן ברירת מחדל. המערכת תמיד יוצרת מופע חדש של הפעילות במשימת היעד ומנתבת אליו את הכוונה. "singleTop"באופן מותנה אם מופע של הפעילות כבר קיים בראש משימת היעד, המערכת מעבירה את ה-intent למופע הזה באמצעות קריאה לשיטה onNewIntent()שלו, במקום ליצור מופע חדש של הפעילות.השקות מיוחדות
(לא מומלץ לשימוש כללי)"singleTask"באופן מותנה המערכת יוצרת את הפעילות בשורש של משימה חדשה או מאתרת את הפעילות במשימה קיימת עם אותה קרבה. אם מופע של הפעילות כבר קיים והוא נמצא ברמת הבסיס של המשימה, המערכת מעבירה את הכוונה למופע הקיים באמצעות קריאה לשיטה onNewIntent()שלו, במקום ליצור מופע חדש."singleInstance"לא זהה ל- "singleTask", אלא שהמערכת לא מפעילה פעילויות אחרות במשימה שמכילה את המופע. הפעילות היא תמיד החברה היחידה במשימה."singleInstancePerTask"באופן מותנה הפעילות יכולה לפעול רק כפעילות הבסיס של המשימה, הפעילות הראשונה שיצרה את המשימה, ולכן יש רק מופע אחד של הפעילות הזו במשימה. עם זאת, אפשר ליצור מופעים של הפעילות כמה פעמים במשימות שונות. כפי שמוצג בטבלה הקודמת,
"standard"הוא מצב ברירת המחדל והוא מתאים לרוב סוגי הפעילויות. "singleTop"הוא גם מצב הפעלה נפוץ ושימושי עבור סוגים רבים של פעילויות. המצבים האחרים,"singleTask","singleInstance"ו-"singleInstancePerTask", לא מתאימים לרוב האפליקציות. הן יוצרות מודל אינטראקציה שסביר להניח שיהיה לא מוכר למשתמשים ושונה מאוד מרוב האפליקציות האחרות.לא משנה באיזה מצב הפעלה תבחרו, הקפידו לבדוק את נוחות השימוש בפעילות במהלך ההפעלה, וגם כשחוזרים אליה מפעילויות וממשימות אחרות באמצעות כפתור 'הקודם'.
מידע נוסף על מצבי הפעלה ועל האינטראקציה שלהם עם
Intentflags זמין במאמר משימות ומקבץ הפעילויות הקודמות (back stack).android:lockTaskMode- ההגדרה הזו קובעת איך המערכת מציגה את ה-Activity הזו כשהמכשיר פועל במצב משימות נעולות (lock task mode).
ב-Android אפשר להריץ משימות במצב אימרסיבי שדומה לקיוסק, שנקרא מצב משימות נעולות (lock task mode). כשהמערכת פועלת במצב משימות נעולות (lock task mode), בדרך כלל משתמשי המכשיר לא יכולים לראות התראות, לגשת לאפליקציות שלא נוספו לרשימת ההיתרים או לחזור למסך הבית, אלא אם אפליקציית Home נוספה לרשימת ההיתרים.
רק אפליקציות שנכללות ברשימת ההיתרים של בקר מדיניות המכשיר (DPC) יכולות לפעול כשהמערכת נמצאת במצב משימות נעולות (lock task mode). אבל אפליקציות מערכת ואפליקציות בעלות הרשאות יכולות לפעול במצב משימות נעולות (lock task mode) בלי להיכלל ברשימת ההיתרים.
הערך יכול להיות כל אחת מהמחרוזות הבאות:
R.attr.lockTaskModeערך תיאור "normal"ערך ברירת מחדל. זה ערך ברירת המחדל. המשימות לא מופעלות במצב משימות נעולות (lock task mode), אבל אפשר להעביר אותן לשם באמצעות הקריאה startLockTask()."never"אי אפשר להפעיל את Tasks במצב
lockTask, והמשתמש במכשיר לא יכול להצמיד את המשימות האלה ממסך הפעולות האחרונות.הערה: המצב הזה זמין רק לאפליקציות מערכת ולאפליקציות עם הרשאות מיוחדות. אפליקציות ללא הרשאות עם הערך הזה נחשבות כ
normal."if_whitelisted"אם ה-DPC מאשר את החבילה הזו באמצעות DevicePolicyManager.setLockTaskPackages(), המצב הזה זהה למצבalways, אלא שהפעילות צריכה לקרוא ל-stopLockTask()לפני שהיא יכולה להסתיים אם היא המשימה הנעולה האחרונה. אם ה-DPC לא מאשר את החבילה הזו, המצב הזה זהה לnormal."always"משימות שמתחילות בפעילות הזו תמיד מופעלות במצב משימות נעולות (lock task mode). אם המערכת כבר במצב נעילת משימות כשהמשימה הזו מופעלת, המשימה החדשה מופעלת מעל המשימה הנוכחית. משימות שהושקו במצב זה יכולות לצאת ממצב משימות נעולות (lock task mode) באמצעות קריאה ל-
finish().הערה: המצב הזה זמין רק לאפליקציות מערכת ולאפליקציות עם הרשאות מיוחדות. אפליקציות ללא הרשאות עם הערך הזה נחשבות כ
normal.המאפיין הזה נוסף ברמת API 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()אם מתחילים פעילות אחרת לקבלת תוצאה מהפעילות הזו.המאפיין הזה נוסף ברמת API 3.
android:parentActivityName- השם של המחלקה הלוגית הראשית של הפעילות. השם שמופיע כאן צריך להיות זהה לשם המחלקה שמופיע במאפיין
android:nameשל רכיב<activity>התואם.המערכת קוראת את המאפיין הזה כדי לקבוע איזו פעילות להתחיל כשהמשתמש מקיש על לחצן 'הקודם' בסרגל הפעולות. המערכת יכולה גם להשתמש במידע הזה כדי ליצור סינתזה של מקבץ פעילויות קודמות (back stack) עם
TaskStackBuilder.כדי לתמוך ברמות API 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>
מידע נוסף על הצהרה על פעילות האב כדי לתמוך בניווט למעלה זמין במאמר הוספת ניווט למעלה.
המאפיין הזה נוסף ברמת API 16.
android:persistableModeהגדרה שקובעת איך מופע של פעילות נשמר בתוך משימה מכילה אחרי הפעלה מחדש של המכשיר.
אם פעילות הבסיס של משימה מגדירה את הערך של המאפיין הזה ל-
persistRootOnly, רק פעילות הבסיס נשמרת. אחרת, נבדקות הפעילויות שנמצאות גבוה יותר במקבץ הפעילויות הקודמות (back stack) של המשימה, וכל פעילות שבה הערך של המאפיין הזה מוגדר כ-persistAcrossRebootsנשמרת.אם משתמשים במאפיין הזה, צריך להגדיר את הערך שלו לאחד מהערכים הבאים:
ערך תיאור persistRootOnlyערך ברירת מחדל. כשמבצעים הפעלה מחדש של המערכת, משימת הפעילות נשמרת, אבל נעשה שימוש רק בכוונת ההפעלה של פעילות הבסיס.
כשכוונת ההפעלה של האפליקציה טוענת את פעילות הבסיס של האפליקציה, הפעילות לא מקבלת אובייקט
PersistableBundle. לכן, אל תשתמשו ב-onSaveInstanceState()כדי לשמור את המצב של פעילות הבסיס של האפליקציה אחרי הפעלה מחדש של המכשיר.הערה: ערך המאפיין הזה משפיע על ההתנהגות של האפליקציה רק אם הוא מוגדר בפעילות הבסיסית של האפליקציה.
persistAcrossRebootsהסטטוס של הפעילות הזו נשמר, יחד עם הסטטוס של כל פעילות אחרת שנמצאת גבוה יותר במחסנית החזרה, שמוגדר לה מאפיין
persistableModeעם הערךpersistAcrossReboots. אם לפעילות אין מאפייןpersistableModeשהערך שלו הואpersistAcrossReboots, או אם היא מופעלת באמצעות הדגלIntent.FLAG_ACTIVITY_NEW_DOCUMENT, הפעילות הזו וכל הפעילויות שמעליה במחסנית האחורית לא נשמרות.כש-Intent טוען פעילות שהמאפיין
persistableModeשלה מוגדר ל-persistAcrossRebootsבאפליקציה, הפעילות מקבלת אובייקטPersistableBundleבשיטהonCreate()שלה. לכן, אפשר להשתמש ב-onSaveInstanceState()כדי לשמור את מצב הפעילות גם אחרי הפעלה מחדש של המכשיר, כל עוד המאפייןpersistableModeמוגדר לערךpersistAcrossReboots.הערה: ערך המאפיין הזה משפיע על ההתנהגות של האפליקציה, גם אם הוא מוגדר בפעילות שאינה פעילות הבסיס של האפליקציה.
persistNeverמצב הפעילות לא נשמר.
הערה: ערך המאפיין הזה משפיע על ההתנהגות של האפליקציה רק אם הוא מוגדר בפעילות הבסיסית של האפליקציה.
המאפיין הזה הוצג ברמת API 21.
android:permission- שם ההרשאה שהלקוחות צריכים לקבל כדי להפעיל את הפעילות או כדי לגרום לה להגיב ל-Intent. אם למתקשר של
startActivity()או שלstartActivityForResult()לא ניתנת ההרשאה שצוינה, ה-Intent שלו לא מועבר לפעילות.אם לא מגדירים את המאפיין הזה, ההרשאה שמוגדרת במאפיין
permissionשל רכיב<application>חלה על הפעילות. אם לא מוגדר אף אחד מהמאפיינים, הפעילות לא מוגנת על ידי הרשאה.מידע נוסף על הרשאות זמין בקטע הרשאות במאמר בנושא סקירה כללית של קובץ מניפסט של אפליקציה ובמאמר טיפים לאבטחה.
android:processשם התהליך שבו הפעילות מתבצעת. בדרך כלל, כל הרכיבים של אפליקציה פועלים בשם תהליך שמוגדר כברירת מחדל ונוצר עבור האפליקציה, ולא צריך להשתמש במאפיין הזה. אבל אם צריך, אפשר להגדיר שם תהליך שונה משם ברירת המחדל באמצעות המאפיין הזה, וכך לפצל את רכיבי האפליקציה בין כמה תהליכים.
אם השם שמוקצה למאפיין הזה מתחיל בנקודתיים (
:), נוצר תהליך חדש שפרטי לאפליקציה כשצריך, והפעילות מתבצעת בתהליך הזה.אם שם התהליך מתחיל באות קטנה, הפעילות מתבצעת בתהליך גלובלי עם אותו שם, בתנאי שיש לה הרשאה לעשות זאת. כך רכיבים באפליקציות שונות יכולים לשתף תהליך, מה שמקטין את השימוש במשאבים.
במאפיין
processשל הרכיב<application>אפשר להגדיר שם תהליך שונה כברירת מחדל לכל הרכיבים.android:relinquishTaskIdentityהאם הפעילות מוותרת על מזהי המשימות שלה לטובת פעילות שמעליה במחסנית המשימות. משימה שפעילות הבסיס שלה כוללת את המאפיין הזה עם הערך
"true"מחליפה את פעילות הבסיסIntentבפעילות הבאה במשימה.אם הפעילות הבאה כוללת גם את המאפיין הזה עם הערך
"true", היא מחזירה את הבסיסIntentלכל פעילות שהיא מפעילה באותה משימה. התהליך הזה נמשך לכל פעילות עד שמגיעים לפעילות שבה המאפיין הזה מוגדר לערך"false". ערך ברירת המחדל הוא"false".המאפיין הזה מוגדר כ-
"true", והוא גם מאפשר להשתמש בActivityManager.TaskDescriptionבפעילות כדי לשנות תוויות, צבעים וסמלים במסך הפריטים האחרונים.android:requireContentUriPermissionFromCaller-
מציינת את ההרשאות שנדרשות להפעלת הפעילות הזו כשמעבירים מזהי URI של תוכן. ערך ברירת המחדל הוא
none, כלומר לא נדרשות הרשאות ספציפיות. הגדרת המאפיין הזה מגבילה את הפעלת הפעילות על סמך ההרשאות של מי שמפעיל אותה. אם למשתמש שקורא לפונקציה אין את ההרשאות הנדרשות, הפעלת הפעילות תידחה באמצעותSecurityException.שימו לב שהאכיפה פועלת לגבי כתובות URI של תוכן בתוך
Intent.getData(),Intent.EXTRA_STREAM, ו-Intent.getClipData().יכול להיות ערך מחרוזת, עם '\\;' לסימון תווי בריחה כמו '\\n' או '\\uxxxx' לתו unicode;
חייב להיות אחד מהערכים הקבועים הבאים.
קבוע ערך תיאור ללא 0 כברירת מחדל, לא נדרשות הרשאות ספציפיות. קריאה 1 הפעולה הזו מחייבת את המפעיל לקבל גישת קריאה למזהי ה-URI של התוכן שהועבר. readAndWrite 4 הפונקציה מחייבת שלמפעיל תהיה הרשאת קריאה והרשאת כתיבה לכתובות ה-URI של התוכן שמועבר. readOrWrite 3 ההרשאה מחייבת את המפעיל לקבל גישת קריאה או כתיבה לכתובות ה-URI של התוכן שהועבר. לכתוב 2 ההרשאה הזו מחייבת את המפעיל לקבל הרשאת כתיבה למזהי ה-URI של התוכן שהועבר. android:resizeableActivity-
ההגדרה קובעת אם האפליקציה תומכת במצב ריבוי חלונות.
אפשר להגדיר את המאפיין הזה ברכיב
<activity>או ברכיב<application>.אם מגדירים את המאפיין הזה לערך
"true", המשתמש יכול להפעיל את הפעילות במצב מסך מפוצל ובמצב חלון חופשי. אם מגדירים את המאפיין לערך"false", אי אפשר לבדוק את האפליקציה או לבצע בה אופטימיזציה לסביבת ריבוי חלונות. המערכת עדיין יכולה להציג את הפעילות במצב ריבוי חלונות עם מצב תאימות.הגדרת המאפיין הזה לערך
"false"לא מבטיחה שלא יהיו אפליקציות אחרות במצב מרובה חלונות שיוצגו על המסך, למשל במצב תמונה בתוך תמונה, או על מסכים אחרים. לכן, הגדרת הדגל הזה לא אומרת שלאפליקציה שלכם יש גישה בלעדית למשאבים.אם האפליקציה מטרגטת רמת API 24 ומעלה ולא מציינים ערך למאפיין הזה, ערך ברירת המחדל של המאפיין הוא
"true".אם האפליקציה מטרגטת רמת API 31 ומעלה, אופן הפעולה של המאפיין הזה שונה במסכים קטנים ובמסכים גדולים:
- מסכים גדולים (רוחב >= 600dp): כל האפליקציות תומכות במצב ריבוי חלונות. המאפיין מציין אם אפשר לשנות את גודל האפליקציה, ולא אם האפליקציה תומכת במצב ריבוי חלונות. אם
resizeableActivity="false", האפליקציה עוברת למצב תאימות כשצריך כדי להתאים למידות המסך. - מסכים קטנים (sw < 600dp): אם הערך של
resizeableActivity="true"והרוחב המינימלי והגובה המינימלי של הפעילות עומדים בדרישות של מצב ריבוי חלונות, האפליקציה תומכת במצב ריבוי חלונות. אם הערך הואresizeableActivity="false", האפליקציה לא תומכת במצב מרובה חלונות, ללא קשר לרוחב ולגובה המינימליים של הפעילות.
ערך הפעילות הבסיסי של משימה חל על כל הפעילויות הנוספות שמופעלות במשימה. כלומר, אם הפעילות הבסיסית של משימה ניתנת לשינוי גודל, המערכת מתייחסת לכל הפעילויות האחרות במשימה כפעילויות שניתנות לשינוי גודל. אם אי אפשר לשנות את הגודל של פעילות הבסיס, אי אפשר לשנות את הגודל של פעילויות אחרות במשימה.
הערה: הערך של פעילות הבסיס של משימה מוחל על כל הפעילויות הנוספות שמופעלות במשימה. כלומר, אם הפעילות הבסיסית של משימה ניתנת לשינוי גודל, המערכת מתייחסת לכל הפעילויות האחרות במשימה כפעילויות שניתנות לשינוי גודל. אם אי אפשר לשנות את הגודל של הפעילות הראשית, אי אפשר לשנות את הגודל של הפעילויות האחרות במשימה.
- מסכים גדולים (רוחב >= 600dp): כל האפליקציות תומכות במצב ריבוי חלונות. המאפיין מציין אם אפשר לשנות את גודל האפליקציה, ולא אם האפליקציה תומכת במצב ריבוי חלונות. אם
android:screenOrientationהכיוון המבוקש של הפעילות.
כשפעילות ממלאת את המסך כולו, הכיוון המבוקש משמש כהצעה לשינוי הכיוון במסך כך שיתאים לערך המבוקש. התוצאה יכולה להיות אוריינטציה שונה מהאוריינטציה הפיזית של המסך במרחב, ולכן המשתמש צריך לסובב את המכשיר כדי להמשיך להשתמש באפליקציה. ב-Android 12 (רמת API 31) ומעלה, יצרני המכשירים יכולים להגדיר מסכים במכשירים (כמו מסך בגודל טאבלט במכשיר מתקפל) כך שיתעלמו מההצעה הזו, ובמקום זאת יכריחו פעילות להיות ממוקמת בתיבת מכתבים באוריינטציה המועדפת של המכשיר על ידי המשתמש. כך, האוריינטציה של הפעילות תהיה זהה לזו שנדרשה בלי שהמשתמש יצטרך לסובב פיזית את המכשיר.
במצב מרובה חלונות, הכיוון המבוקש לא משמש כהצעה לכיוון הכללי. אם הפעילות בפורמט letterbox, האוריינטציה המבוקשת משפיעה על ה-letterboxing שמוחל על הפעילות.
הערך יכול להיות אחת מהמחרוזות הבאות:
"unspecified"ערך ברירת המחדל. המערכת בוחרת את הכיוון. המדיניות שבה הוא משתמש, ולכן הבחירות שנעשות בהקשרים ספציפיים, עשויות להיות שונות ממכשיר למכשיר. "behind"אותו כיוון כמו הפעילות שנמצאת מיד מתחתיה ברשימת הפעילויות (activity stack). "landscape"כיוון לרוחב (התצוגה רחבה יותר מאשר גבוהה). "portrait"כיוון לאורך (התצוגה גבוהה יותר מאשר רחבה). "reverseLandscape"כיוון לרוחב בכיוון ההפוך מהכיוון הרגיל לרוחב. נוסף ברמת API 9. "reversePortrait"כיוון לאורך בכיוון ההפוך מכיוון לאורך רגיל. נוסף ברמת API 9. "sensorLandscape"כיוון לרוחב, אבל יכול להיות רגיל או הפוך לרוחב בהתאם לחיישן המכשיר. החיישן נמצא בשימוש גם אם המשתמש נעל את הסיבוב שמבוסס על חיישן. נוסף ברמת API 9. "sensorPortrait"פורמט לאורך, אבל יכול להיות פורמט רגיל או הפוך לאורך בהתאם לחיישן המכשיר. החיישן נמצא בשימוש גם אם המשתמש נעל את הסיבוב שמבוסס על חיישן. עם זאת, יכול להיות שסיבוב הפוך לא יתאפשר בהתאם לתצורת המכשיר. נוסף ברמת API 9. "userLandscape"הכיוון הוא לרוחב, אבל יכול להיות לרוחב רגיל או לרוחב הפוך בהתאם לחיישן המכשיר ולהעדפת המשתמש. נוסף ברמת API 18. "userPortrait"תצוגה לאורך, אבל יכולה להיות רגילה או הפוכה בהתאם לחיישן המכשיר ולהעדפת המשתמש. עם זאת, יכול להיות שסיבוב הפוך לא יתאפשר, בהתאם להגדרות המכשיר. נוסף ברמת API 18. "sensor"הכיוון נקבע על ידי חיישן הכיוון של המכשיר. הכיוון של התצוגה תלוי באופן שבו המשתמש מחזיק את המכשיר. הוא משתנה כשהמשתמש מסובב את המכשיר. עם זאת, בחלק מהמכשירים, כברירת מחדל, המסך לא מסתובב לכל ארבעת הכיוונים האפשריים. כדי להשתמש בכל ארבעת הכיוונים, צריך להשתמש ב- "fullSensor". החיישן נמצא בשימוש גם אם המשתמש נעל את הסיבוב שמבוסס על החיישן."fullSensor"חיישן הכיוון של המכשיר קובע את הכיוון מתוך ארבעת הכיוונים האפשריים. התכונה הזו דומה ל- "sensor", אבל היא מאפשרת להשתמש בכל אחד מארבעת כיווני המסך האפשריים, בלי קשר למה שהמכשיר תומך בו בדרך כלל. לדוגמה, במכשירים מסוימים לא נעשה בדרך כלל שימוש בהצגה הפוכה של מצב אנכי או אופקי, אבל ההגדרה הזו מאפשרת את כיווני המסך האלה. נוסף ברמת API 9."nosensor"הכיוון נקבע בלי להתייחס לחיישן כיוון פיזי. המערכת מתעלמת מהחיישן, ולכן המסך לא מסתובב בהתאם לאופן שבו המשתמש מזיז את המכשיר. "user"ההתמצאות המועדפת הנוכחית של המשתמש. "fullUser"אם המשתמש נעל את הסיבוב שמבוסס על חיישן, ההתנהגות זהה ל- user, אחרת ההתנהגות זהה ל-fullSensorומאפשרת כל אחת מארבע האפשרויות של כיוון המסך. נוסף ברמת API 18."locked"הכיוון ננעל לסיבוב הנוכחי, לא משנה מהו. נוסף ברמת API 18. הערה: כשמצהירים על אחד מהערכים של מצב אופקי או אנכי, הוא נחשב לדרישה מחייבת לגבי האוריינטציה שבה הפעילות מופעלת. הערך שאתם מציינים מאפשר סינון לפי שירותים כמו Google Play, כך שהאפליקציה שלכם זמינה רק למכשירים שתומכים בכיוון שנדרש לפעילויות שלכם. לדוגמה, אם מצהירים על
"landscape","reverseLandscape"או"sensorLandscape", האפליקציה זמינה רק למכשירים שתומכים בכיוון לרוחב.בנוסף, צריך להצהיר באופן מפורש שהאפליקציה דורשת כיוון לאורך או לרוחב באמצעות רכיב
<uses-feature>, כמו<uses-feature android:name="android.hardware.screen.portrait"/>. זהו אופן סינון שמוגדר על ידי Google Play ושירותים אחרים שתומכים בו, והפלטפורמה עצמה לא קובעת אם אפשר להתקין את האפליקציה כשמכשיר תומך רק בכיוונים מסוימים.android:showForAllUsers-
האם הפעילות מוצגת כשהמשתמש הנוכחי במכשיר שונה מהמשתמש שהפעיל את הפעילות. אפשר להגדיר את המאפיין הזה לערך מילולי, כמו
"true"או"false", או להגדיר את המאפיין למאפיין משאב או למאפיין של ערכת נושא שמכיל ערך בוליאני.המאפיין הזה נוסף ברמת API 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"מוסיפה סרגל בחלק התחתון של המסך כדי להציג פעולות לביצוע בסרגל האפליקציות, שנקרא גם סרגל הפעולות, כשיש מגבלות על המרחב האופקי, למשל כשמשתמשים במכשיר במצב לאורך. במקום מספר קטן של פריטים לפעולה שמופיעים בסרגל האפליקציות בחלק העליון של המסך, סרגל האפליקציות מחולק לקטע הניווט העליון ולסרגל התחתון של הפריטים לפעולה. כלומר, מוקצה מקום סביר לא רק לפריטי הפעולה, אלא גם לניווט ולרכיבי הכותרת בחלק העליון. הפריטים בתפריט לא מפולגים בין שני הסרגלים. הם תמיד מופיעים ביחד. מידע נוסף על סרגל האפליקציות זמין במאמר הוספת סרגל האפליקציות.
המאפיין הזה נוסף ברמת API 14.
android:windowSoftInputMode- איך החלון הראשי של הפעילות יוצר אינטראקציה עם החלון שמכיל את המקלדת הווירטואלית שמוצגת על המסך. ההגדרה של המאפיין הזה משפיעה על שני דברים:
- האם המקלדת הווירטואלית מוסתרת או גלויה כשהפעילות הופכת למוקד תשומת הלב של המשתמש.
- אם החלון הראשי של הפעילות משנה את הגודל שלו לקטן יותר כדי לפנות מקום למקלדת הווירטואלית, או שהתוכן שלו זז כדי שהמיקוד הנוכחי יהיה גלוי כשחלק מהחלון מכוסה על ידי המקלדת הווירטואלית.
ההגדרה צריכה להיות אחד מהערכים שמפורטים בטבלה הבאה או שילוב של ערך
"state..."אחד וערך"adjust..."אחד. הגדרת כמה ערכים בכל אחת מהקבוצות, כמו כמה ערכי"state...", תניב תוצאות לא מוגדרות. הערכים הנפרדים מופרדים באמצעות קו אנכי (|), כמו בדוגמה הבאה:<activity android:windowSoftInputMode="stateVisible|adjustResize" ... >
ערכים שמוגדרים כאן (חוץ מ-
"stateUnspecified"ומ-"adjustUnspecified") מבטלים את הערכים שמוגדרים בערכת הנושא.ערך תיאור "stateUnspecified"לא מצוין אם המקלדת הווירטואלית מוסתרת או גלויה. המערכת בוחרת מצב מתאים או מסתמכת על ההגדרה בעיצוב. זוהי הגדרת ברירת המחדל להתנהגות של המקלדת הווירטואלית.
"stateUnchanged"המקלדת הווירטואלית נשארת במצב האחרון שלה, גלויה או מוסתרת, כשהפעילות עוברת לחזית. "stateHidden"המקלדת הווירטואלית מוסתרת כשהמשתמש בוחר את הפעילות – כלומר, כשהמשתמש מנווט קדימה אל הפעילות, ולא כשהוא חוזר אליה כשיוצאים מפעילות אחרת. "stateAlwaysHidden"המקלדת הווירטואלית תמיד מוסתרת כשהחלון הראשי של הפעילות כולל פוקוס קלט. "stateVisible"המקלדת הווירטואלית מוצגת כשהמשתמש בוחר את הפעילות – כלומר, כשהמשתמש מנווט קדימה אל הפעילות, ולא כשהוא חוזר אליה אחרי שעזב פעילות אחרת. "stateAlwaysVisible"המקלדת הווירטואלית מוצגת כשהחלון מקבל את מיקוד הקלט. "adjustUnspecified"לא מצוין אם הגודל של החלון הראשי של הפעילות משתנה כדי לפנות מקום למקלדת הווירטואלית, או שהתוכן של החלון מוזז כדי שהמיקום הנוכחי של הפוקוס יהיה גלוי על המסך. המערכת בוחרת אוטומטית באחד מהמצבים האלה, בהתאם לשאלה אם יש בחלון תצוגות פריסה שאפשר לגלול את התוכן שלהן. אם יש תצוגה כזו, גודל החלון ישתנה, מתוך הנחה שגלילה יכולה להפוך את כל התוכן של החלון לגלוי באזור קטן יותר. זוהי הגדרת ברירת המחדל להתנהגות של החלון הראשי.
"adjustResize"הגודל של החלון הראשי של הפעילות משתנה תמיד כדי לפנות מקום למקלדת הווירטואלית במסך. "adjustPan"הגודל של החלון הראשי של הפעילות לא משתנה כדי לפנות מקום למקלדת הווירטואלית. במקום זאת, התוכן בחלון עובר באופן אוטומטי לתצוגה פנורמית כך שהמיקוד הנוכחי אף פעם לא מוסתר על ידי המקלדת, והמשתמשים תמיד יכולים לראות מה הם מקלידים. בדרך כלל עדיף לשנות את הגודל של החלון מאשר להזיז אותו, כי יכול להיות שהמשתמש יצטרך לסגור את המקלדת הווירטואלית כדי לגשת לחלקים מוסתרים של החלון ולבצע בהם פעולות. "adjustNothing"החלון הראשי של הפעילות לא משנה את הגודל שלו ולא זז כדי לפנות מקום למקלדת הווירטואלית. הפעילות אחראית להקצאת מקום למקלדת הרכה באמצעות שוליים פנימיים של החלון. בפעילויות שמטפלות בתוספות של חלונות בצורה נכונה, ההגדרה הזו מאפשרת את השליטה המקסימלית באופן שבו התוכן של החלון מוצג במסך. המאפיין הזה נוסף ברמת API 3.
- הושק ב:
- רמת API 1 לכל המאפיינים חוץ מ
noHistoryומ-windowSoftInputMode, שנוספו ברמת API 3. - ראו גם:
<application><activity-alias>
<activity>
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2026-07-01 (שעון UTC).
[null,null,["עדכון אחרון: 2026-07-01 (שעון UTC)."],[],[]]