תצוגה מותאמת אישית שמעוצבת בצורה נכונה היא כמו כל כיתה שמעוצבת היטב. הוא כולל קבוצה ספציפית של פונקציונליות בממשק פשוט, שימוש יעיל במעבד (CPU) ובזיכרון ועוד. לחשבון בנוסף להיותו כיתה שמעוצבת בצורה נכונה, תצוגה מותאמת אישית צריכה להשיג את הדברים הבאים:
- להתאים לתקנים של Android.
- צריך לספק מאפיינים שאפשר להתאים אישית את סגנון העבודה שלהם עם פריסות XML של Android.
- שליחת אירועי נגישות.
- להיות תואמים לכמה פלטפורמות של Android.
ה-framework של Android מספק קבוצה של מחלקות בסיס ותגי XML כדי לעזור לכם ליצור תצוגה שעומד בכל הקריטריונים האלה בדרישות שלנו. השיעור הזה מסביר איך להשתמש ב-Android Framework כדי ליצור את הליבה הפונקציונליות של תצוגה בכיתה.
אפשר למצוא הצעות נוספות מידע בקטע רכיבי תצוגה מותאמת אישית.
תצוגה לפי סיווג משנה
כל סיווגי הצפיות שהוגדרו במסגרת Android מורחבת
View
שלך
גם תצוגה מותאמת אישית
ניתן להרחיב ישירות את View
, או שאפשר
לחסוך זמן באמצעות הרחבה של אחד
תצוגה קיימת
המחלקות המשניות, כמו Button
.
כדי לאפשר ל-Android Studio לבצע אינטראקציה עם התצוגה, לכל הפחות יש לספק מבנה שלוקח
Context
ואובייקט AttributeSet
כפרמטרים.
ה-constructor הזה מאפשר לעורך הפריסה ליצור ולערוך מופע של התצוגה.
Kotlin
class PieChart(context: Context, attrs: AttributeSet) : View(context, attrs)
Java
class PieChart extends View { public PieChart(Context context, AttributeSet attrs) { super(context, attrs); } }
הגדרת מאפיינים מותאמים אישית
כדי להוסיף View
מובנה לממשק המשתמש, צריך לציין אותו ברכיב XML ו
לשלוט
המראה וההתנהגות באמצעות מאפיינים של רכיבים. אפשר גם להוסיף ולהתאים אישית את הסגנון
תצוגות מפורטות באמצעות XML. שפת תרגום
כדי להפעיל את ההתנהגות הזו בתצוגה המותאמת אישית, צריך לבצע את הפעולות הבאות:
- אפשר להגדיר מאפיינים מותאמים אישית לתצוגה ברכיב משאב
<declare-styleable>
. - מציינים ערכים למאפיינים בפריסת ה-XML.
- אחזור ערכי מאפיינים בזמן ריצה.
- מחילים על התצוגה המפורטת את ערכי המאפיינים שאוחזרו.
בקטע הזה נסביר איך להגדיר מאפיינים מותאמים אישית ולציין את הערכים שלהם. בחלק הבא נסביר אחזור ויישום של הערכים בזמן הריצה.
כדי להגדיר מאפיינים מותאמים אישית, צריך להוסיף משאבים מסוג <declare-styleable>
לפרויקט. מקובל להכניס את המשאבים האלה
קובץ res/values/attrs.xml
. הנה
דוגמה לקובץ attrs.xml
:
<resources> <declare-styleable name="PieChart"> <attr name="showText" format="boolean" /> <attr name="labelPosition" format="enum"> <enum name="left" value="0"/> <enum name="right" value="1"/> </attr> </declare-styleable> </resources>
הקוד הזה מצהיר על שני מאפיינים מותאמים אישית, showText
ו-labelPosition
,
ששייכים לסגנון
ישות בשם PieChart
. לפי המוסכמה, שם הישות שניתן לעצב אותה זהה
בשם
שם הכיתה
שמגדירה את התצוגה המותאמת אישית. למרות שלא צריך לפעול לפי המוסכמה הזו,
קודים פופולריים רבים
העורכים מסתמכים על המוסכמה הזו למתן שמות כדי לספק את השלמת ההצהרה.
אחרי שמגדירים מאפיינים מותאמים אישית, אפשר להשתמש בהם בפריסה של קובצי XML בדיוק כמו המאפיינים המובנים.
. היחיד
ההבדל הוא שהמאפיינים המותאמים אישית שייכים למרחב שמות אחר. במקום תחושת שייכות
למרחב השמות http://schemas.android.com/apk/res/android
, הם שייכים ל-http://schemas.android.com/apk/res/[your package name]
. לדוגמה, כך אתם יכולים להשתמש
מאפיינים שהוגדרו עבור
PieChart
:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto"> <com.example.customviews.charting.PieChart custom:showText="true" custom:labelPosition="left" /> </LinearLayout>
כדי להימנע מהצורך לחזור על ה-URI הארוך של מרחב השמות, הדוגמה משתמשת ב-
ההוראה xmlns
. ההוראה הזו תקצה את הכינוי custom
ל
מרחב השמות http://schemas.android.com/apk/res/com.example.customviews
.
אפשר לבחור כל כתובת אימייל חלופית שרוצים למרחב השמות.
שימו לב לשם של תג ה-XML שמוסיף את התצוגה המותאמת אישית לפריסה. זו לחלוטין
השם המוסמך של
שיעור צפייה בהתאמה אישית. אם הכיתה של הצופה היא כיתה פנימית, צריך לשפר את ההתאמה שלה
בשם המחלקה החיצונית של התצוגה.
לדוגמה,
בכיתה PieChart
יש כיתה פנימית בשם PieView
. כדי להשתמש
מהכיתה הזו,
משתמשים בתג com.example.customviews.charting.PieChart$PieView
.
החלת מאפיינים מותאמים אישית
כשנוצרת תצוגה מפריסת XML, כל המאפיינים בתג ה-XML נקראים
מהמשאב
מקובצות ומועברות ל-constructor של התצוגה
AttributeSet
למרות שזה
לקרוא ערכים ישירות מ-AttributeSet
, ככה
יש כמה חסרונות:
- הפניות למשאבים בתוך ערכי מאפיינים לא נספרות.
- הסגנונות לא הוחלו.
במקום זאת, מעבירים את AttributeSet
אל
obtainStyledAttributes()
.
השיטה הזו מחזירה
TypedArray
מערך של
ערכים
כבר בוטלה והסגנון שלה.
מהדר המשאבים של Android משקיע הרבה מאמץ כדי לבצע שיחות
obtainStyledAttributes()
יותר קל. לכל <declare-styleable>
בספרייה res/
, השדה R.java
שנוצר מגדיר גם מערך של מאפיינים
מזהים וקבוצת של
קבועים שמגדירים את האינדקס לכל מאפיין במערך. תשתמשו
קבועים לקרוא
את המאפיינים מהשדה TypedArray
. כך עושים את זה
הכיתה PieChart
קורא את המאפיינים שלו:
Kotlin
init { context.theme.obtainStyledAttributes( attrs, R.styleable.PieChart, 0, 0).apply { try { mShowText = getBoolean(R.styleable.PieChart_showText, false) textPos = getInteger(R.styleable.PieChart_labelPosition, 0) } finally { recycle() } } }
Java
public PieChart(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.getTheme().obtainStyledAttributes( attrs, R.styleable.PieChart, 0, 0); try { mShowText = a.getBoolean(R.styleable.PieChart_showText, false); textPos = a.getInteger(R.styleable.PieChart_labelPosition, 0); } finally { a.recycle(); } }
הערה: TypedArray
אובייקטים
הן משאב משותף
וצריך למחזר אותן לאחר השימוש.
הוספת נכסים ואירועים
מאפיינים הם דרך יעילה לשלוט בהתנהגות ובמראה של הצפיות, אבל
הם יכולים רק לקרוא
כאשר התצוגה מאותחלת. כדי לספק התנהגות דינמית, צריך לחשוף רכיב מקבל של נכס
צמד הגדרות לכל אחד
מאפיין בהתאמה אישית. קטע הקוד הבא מראה איך PieChart
חושף נכס
שנקרא showText
:
Kotlin
fun isShowText(): Boolean { return mShowText } fun setShowText(showText: Boolean) { mShowText = showText invalidate() requestLayout() }
Java
public boolean isShowText() { return mShowText; } public void setShowText(boolean showText) { mShowText = showText; invalidate(); requestLayout(); }
לתשומת ליבך, setShowText
קוראת ל-invalidate()
ו-requestLayout()
. השיחות האלה חיוניות
כדי להבטיח שהתצוגה תפעל באופן מהימן. צריך
כדי לבטל את תוקף התצוגה אחרי כל שינוי במאפיינים שלה שעשוי לשנות את
המראה,
המערכת יודעת שצריך לשרטט אותו מחדש. באופן דומה, תצטרכו לבקש פריסה חדשה אם
משתנה באופן מסוים
שעשויים להשפיע על הגודל או הצורה של התצוגה. השכיחה של קריאות ה-method האלה עלולה לגרום
קשה למצוא
באגים.
תצוגות בהתאמה אישית חייבות לתמוך גם במאזינים של אירועים כדי להעביר אירועים חשובים. עבור
מופע, PieChart
חושף אירוע מותאם אישית בשם OnCurrentItemChanged
כדי ליידע את המאזינים
המשתמש סובב את
תרשים עוגה שמתמקד בפרוסת עוגה חדשה.
קל לשכוח לחשוף נכסים ואירועים, במיוחד אם אתם המשתמשים היחידים של התצוגה המותאמת אישית. אם תקדישו זמן להגדרה קפדנית של ממשק התצוגה, תפחיתו את כמות התחזוקה העתידית עלויות. כלל טוב הוא לחשוף תמיד כל נכס שמשפיע על מראה או התנהגות של התצוגה המותאמת אישית שלכם.
תכנון תוך התחשבות בנגישות
התצוגה המותאמת אישית חייבת לתמוך במגוון רחב של משתמשים. זה כולל משתמשים עם מוגבלויות למנוע מהם לראות מסך מגע או להשתמש בו. כדי לתמוך במשתמשים עם מוגבלויות, לבצע את הפעולות הבאות:
- מוסיפים תוויות לשדות להזנת קלט באמצעות
android:contentDescription
. - שליחת אירועי נגישות באמצעות התקשרות אל
sendAccessibilityEvent()
כשיש צורך. - תמיכה בבקרים חלופיים, כמו לחצני החיצים (D-pad) או כדור עקיבה.
למידע נוסף על יצירת תצוגות נגישות: שיפור הנגישות של אפליקציות.