מושגים ויישום ב-Jetpack Compose
Android Studio כולל כלי שנקרא Vector Asset Studio, שעוזר להוסיף סמלי Material ולייבא קבצים מסוג Scalable Vector Graphic (SVG) ו-Adobe Photoshop Document (PSD) לפרויקט כמשאבי פריט גרפי וקטורי שניתן לשרטוט. שימוש בנכסי וקטור במקום במפות סיביות מקטין את הגודל של קובץ ה-APK, כי אפשר לשנות את הגודל של אותו קובץ כדי להתאים אותו לדחיסויות שונות של מסכים בלי לפגוע באיכות התמונה. בגרסאות קודמות של Android שלא תומכות בפריטים גרפיים וקטוריים שניתנים לשרטוט, הכלי Vector Asset Studio יכול להמיר את הפריטים הגרפיים הווקטוריים שניתנים לשרטוט שלכם לגדלים שונים של מפות סיביות (bitmap) לכל דחיסות מסך משך זמן של תהליך build.
מידע על Vector Asset Studio
Vector Asset Studio מוסיף גרפיקה וקטורית לפרויקט כקובץ XML שמתאר את התמונה. יכול להיות שיהיה לכם קל יותר לשמור על קובץ XML אחד מאשר לעדכן כמה תמונות רסטר ברזולוציות שונות.
Android 4.4 (רמת API 20) ומטה לא תומכות בנכסי וקטורים. אם רמת ה-API המינימלית מוגדרת לאחת מרמות ה-API האלה, יש לכם שתי אפשרויות כשאתם משתמשים ב-Vector Asset Studio: ליצור קובצי Portable Network Graphic (PNG) (ברירת המחדל) או להשתמש בטכניקת התאימות לאחור ב-AndroidX.
לצורך תאימות לדורות קודמים, Vector Asset Studio יוצר תמונות רסטר של פריט גרפי וקטורי שניתן לשרטוט. הנכסים הווקטוריים והרסטריים נארזים יחד בקובץ ה-APK. אפשר להתייחס ל-vector drawables כאל Drawable בקוד Java או כאל @drawable בקוד XML. כשהאפליקציה פועלת, התמונה הווקטורית או תמונת הרסטר המתאימה מוצגת באופן אוטומטי בהתאם לרמת ה-API.
תאימות לאחור ב-AndroidX
כדי להשתמש בטכניקה הזו, צריך AndroidX בגרסה 1.0 ומעלה ו-Android Plugin for Gradle בגרסה 3.2 ומעלה, והיא מתבססת רק על נכסי וקטור. המחלקות VectorDrawableCompat ב-AndroidX מאפשרות תמיכה ב-VectorDrawable ב-Android מגרסה 2.1 (רמת API 7) ואילך.
לפני שמשתמשים ב-Vector Asset Studio, צריך להוסיף הצהרה לקובץ build.gradle:
מגניב
android { defaultConfig { vectorDrawables.useSupportLibrary = true } } dependencies { implementation 'androidx.appcompat:appcompat:1.7.1' }
Kotlin
android { defaultConfig { vectorDrawables.useSupportLibrary = true } } dependencies { implementation("androidx.appcompat:appcompat:1.7.1") }
כדי להשיג תאימות לאחור, צריך להשתמש בטכניקות קידוד של AndroidX, כמו שימוש במאפיין app:srcCompat במקום במאפיין android:src עבור רכיבי drawable וקטוריים. מידע נוסף זמין במאמר בנושא AndroidX.
הוספת פריט גרפי וקטורי שניתן לשרטוט לפריסת תוכן
בקובץ פריסה, אפשר להגדיר כל ווידג'ט שקשור לסמל, כמו ImageButton, ImageView וכו', כך שיצביע על פריט גרפי וקטורי שניתן לשרטוט.
לדוגמה, בפריסה הבאה מוצג וקטור ניתן לציור שמוצג על כפתור:
איור 1. פריט גרפי וקטורי שניתן לשרטוט שמוצג על לחצן בפריסת דף.
כדי להציג פריט גרפי וקטורי שניתן לשרטוט בווידג'ט, כמו שמוצג באיור:
פותחים פרויקט ומייבאים קובץ וקטורי.
בדוגמה הזו נעשה שימוש בפרויקט של טלפון או טאבלט שנוצר באמצעות אשף הפרויקט החדש.
בתצוגת Android של החלון Project (פרויקט), לוחצים פעמיים על קובץ XML של פריסה, כמו
content_main.xml.לוחצים על הכרטיסייה עיצוב כדי להציג את כלי העריכה של הפריסה.
גוררים את הווידג'ט
ImageButtonמהחלון Palette אל Layout Editor.בתיבת הדו-שיח Resources, בוחרים באפשרות Drawable בחלונית הימנית, ואז בוחרים את ה-vector drawable שייבאתם. לוחצים על אישור.
הפריט הגרפי הווקטורי שניתן לשרטוט מופיע ב-
ImageButtonבפריסה.כדי לשנות את צבע התמונה לצבע המשני שמוגדר בעיצוב, בחלון מאפיינים, מאתרים את המאפיין גוון ולוחצים על … .
בתיבת הדו-שיח Resources, בוחרים באפשרות Color בחלונית הימנית, ואז בוחרים באפשרות colorAccent. לוחצים על אישור.
הצבע של התמונה משתנה לצבע המשני בפריסה.
אם הפרויקט משתמש ב-AndroidX, הקוד ImageButton צריך להיות דומה לקוד הבא:
<ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@drawable/ic_build_black_24dp" tools:layout_editor_absoluteX="11dp" tools:layout_editor_absoluteY="225dp" android:id="@+id/imageButton" android:tint="@color/colorAccent" />
אם הפרויקט לא משתמש ב-AndroidX, קוד ה-vector drawable יהיה android:src="@drawable/ic_build_black_24dp".
הפניה לפריט גרפי וקטורי שניתן לשרטוט בקוד
בדרך כלל אפשר להתייחס למשאב של ציור וקטורי באופן כללי בקוד, וכשהאפליקציה פועלת, התמונה הווקטורית או תמונת הרסטר המתאימה מוצגת באופן אוטומטי בהתאם לרמת ה-API:
ברוב המקרים, אפשר להתייחס ל-vector drawables כאל
@drawableבקוד XML או כאלDrawableבקוד Java.לדוגמה, קוד ה-XML הבא של הפריסה מחיל את התמונה על תצוגה:
<ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/myimage" />
הקוד הבא מאחזר את התמונה כ-
Drawable:Kotlin
val drawable = resources.getDrawable(R.drawable.myimage, theme)
Java
Resources res = getResources(); Drawable drawable = res.getDrawable(R.drawable.myimage, getTheme());
ה-method
getResources()נמצא ב-classContext, שרלוונטי לאובייקטים של ממשק המשתמש, כמו פעילויות, מקטעים, פריסות, תצוגות וכו'.אם האפליקציה שלכם משתמשת ב-AndroidX (גם אם אין הצהרת
vectorDrawables.useSupportLibrary = trueבקובץbuild.gradle), אתם יכולים גם להפנות לפריט גרפי וקטורי שניתן לשרטוט באמצעות הצהרתapp:srcCompat. לדוגמה:<ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" app:srcCompat="@drawable/myimage" />
לפעמים צריך לבצע המרה של משאב drawable לסוג הנתונים המדויק שלו, למשל כשצריך להשתמש בתכונות ספציפיות של המחלקה
VectorDrawable. כדי לעשות זאת, אפשר להשתמש בקוד כמו זה שמופיע בהמשך:Kotlin
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { val vectorDrawable = drawable as VectorDrawable } else { val bitmapDrawable = drawable as BitmapDrawable }
Java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { VectorDrawable vectorDrawable = (VectorDrawable) drawable; } else { BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; }
אפשר לגשת למשאבי פריט גרפי וקטורי שניתן לשרטוט רק מה-main thread.
ב-Android 5.0 (ברמת API 21) ומעלה, אפשר להשתמש במחלקה AnimatedVectorDrawable כדי להנפיש את המאפיינים של המחלקה VectorDrawable. עם AndroidX, אפשר להשתמש במחלקה AnimatedVectorDrawableCompat כדי להנפיש את המחלקה VectorDrawable ב-Android מגרסה 3.0 (רמת API 11) ואילך. מידע נוסף זמין במאמר בנושא הנפשה של גרפיקה מסוג drawable.