MDC-111 Android: שילוב רכיבי Material ב-codebase (Kotlin)

1. מבוא

logo_components_color_2x_web_96dp.png

Material Components (MDC) עוזר למפתחים להטמיע Material Design. MDC נוצר על ידי צוות של מהנדסים ומעצבי חוויית המשתמש ב-Google, שכולל עשרות רכיבים יפים ופונקציונליים של ממשק המשתמש. זמין ל-Android, ל-iOS, לאינטרנט ול-Flutter.material.io/develop

Material Elements ל-Android (MDC Android) היא לא מערכת או framework חדשים שמחייבים שינוי פרדיגמה באפליקציה. MDC Android מבוסס על אותם המחלקות וממשקי ה-API שאתם כבר מכירים ב-Android, כמו לחצני AppCompat ושדות טקסט. אפשר להשתמש ברכיבים שמסופקים על ידי MDC Android לפי הצורך ולשפר באופן מיידי את העיצוב של האפליקציה הקיימת.

מה תפַתחו

ב-Codelab הזה מחליפים חלק מהרכיבים הקיימים בצורה ברכיבים חדשים על ידי MDC.

רכיבי MDC-Android ב-Codelab הזה

  • שדות טקסט
  • לחצנים
  • תפריטים

מה צריך להכין

  • ידע בסיסי בפיתוח Android
  • Android Studio (אפשר להוריד אותו כאן אם עדיין אין לך אותו)
  • אמולטור או מכשיר של Android (האפשרות זמינה ב-Android Studio)
  • הקוד לדוגמה (מידע נוסף מופיע בשלב הבא)

איזה דירוג מגיע לדעתך לרמת הניסיון שלך בפיתוח אפליקציות ל-Android?

מתחילים בינונית בקיאים

2. הגדרת סביבת הפיתוח

להורדת האפליקציה לתחילת פעולה של Codelab

האפליקציה לתחילת הפעולה נמצאת בספרייה material-components-android-codelabs-111-starter/kotlin. חשוב להקליד cd בספרייה הזו לפני שמתחילים.

...או לשכפל אותו מ-GitHub

כדי לשכפל את ה-Codelab הזה מ-GitHub, מריצים את הפקודות הבאות:

git clone https://github.com/material-components/material-components-android-codelabs
cd material-components-android-codelabs/
git checkout 111-starter

טוענים את הקוד לתחילת הפעולה ב-Android Studio

  1. כשאשף ההגדרה יסתיים ובחלון ברוכים הבאים אל Android Studio, לוחצים על פתיחת פרויקט קיים של Android Studio. מנווטים לספרייה שבה התקנתם את הקוד לדוגמה ובוחרים באפשרות kotlin -> משלוח (או לחפש במחשב את המילה shipping) כדי לפתוח את פרויקט המשלוח.
  2. ממתינים רגע עד שמערכת Android Studio תסיים לבנות ולסנכרן את הפרויקט, כפי שמוצג באינדיקטורים של הפעילות בחלק התחתון של החלון של Android Studio.
  3. בשלב הזה, ייתכן שיוצגו ב-Android Studio חלק משגיאות ה-build כי ה-SDK של Android או כלי ה-build חסרים לכם, כמו זה שמוצג למטה. כדי להתקין או לעדכן אותם ולסנכרן את הפרויקט, פועלים לפי ההוראות ב-Android Studio.

2wEZ1kuSFwiRvi_vYXnYfwoQ5J79OVBi1SL6044ETje5cDT2rUHGy8ExjGxlBWlWuNUMf5tkLRUrr2_bz_0Im_JDvLyC-X-tNmBJvKUgsn8T4d11A1cq0ItqQl2n6DJrYKY-dEyRdw

הפעלת אפליקציה לתחילת פעולה

  1. מוודאים שתצורת ה-build שמשמאל ללחצן ההפעלה / ההפעלה היא app.
  2. לוחצים על לחצן ההפעלה / ההפעלה כדי לבנות את האפליקציה ולהפעיל אותה.
  3. בחלון בחירת יעד פריסה, אם כבר יש לכם מכשיר Android שרשום ברשימת המכשירים הזמינים, מדלגים לשלב 8. אחרת, לוחצים על יצירת מכשיר וירטואלי חדש.
  4. במסך בחירת חומרה, בוחרים מכשיר טלפון, כמו Pixel 2, ולוחצים על הבא.
  5. במסך תמונת המערכת, בוחרים גרסת Android האחרונה, רצוי רמת ה-API הגבוהה ביותר. אם היא לא מותקנת, לוחצים על הקישור הורדה שמופיע ומשלימים את ההורדה.
  6. לוחצים על הבא.
  7. במסך מכשיר וירטואלי של Android (AVD), משאירים את ההגדרות כפי שהן ולוחצים על סיום.
  8. בוחרים מכשיר Android מתיבת הדו-שיח של יעד הפריסה.
  9. לוחצים על אישור.
  10. על ידי Android Studio מפתחים את האפליקציה, פורסים אותה ופותחים אותה באופן אוטומטי במכשיר היעד.

הצלחת! אמורים לראות את האפליקציה ואת הצורה שלה.

dba8e6132a12da58.png

3. עדכון שדות הטקסט

לשדות טקסט בעיצוב חדשני יש יתרונות משמעותיים בהשוואה לשדות טקסט פשוטים. הגדרת אזור ההיט עם קו מתאר או מילוי רקע מגדילה את הסיכוי שמשתמשים יקיימו אינטראקציה עם הטופס או יזהו שדות טקסט בתוכן מורכב יותר.

ייבוא מ-MDC ל-Android

עוברים לקובץ build.gradle של המודול app ומוודאים שהבלוק dependencies כולל תלות ב-MDC Android:

api 'com.google.android.material:material:1.1.0-alpha05'

החלפת סגנונות של שדות טקסט

ב-shipping_info_activity.xml, צריך להוסיף את הסגנון הבא לכל רכיבי ה-XML של TextInputLayout:

shipping_info_activity.xml

style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"

כל TextInputLayout אמור להיראות כך:

shipping_info_activity.xml

<com.google.android.material.textfield.TextInputLayout
   android:id="@+id/name_text_input"
   style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   app:errorEnabled="true">

   <com.google.android.material.textfield.TextInputEditText
       android:id="@+id/name_edit_text"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:hint="@string/label_name" />
</com.google.android.material.textfield.TextInputLayout>

יצירה והפעלה:

824c2b33592b2c7e.png

כל שדות הטקסט מתעדכנים לשימוש בעיצובים החדשים יותר ב-MDC.

הוספת שגיאה

בשדות הטקסט של MDC יש אפשרות מובנית להצגת שגיאות. ב-MDC מוסיפים טקסט אדום מתחת לשדה הטקסט ומעדכנים גם קישוטים לאדום.

ב-ShippingInfoActivity.kt, צריך לעדכן את onCreate() כדי לבדוק את קלט הטקסט ולהגדיר שגיאות לפי הצורך. זה אמור להיראות כך:

ShippingInfoActivity.kt

override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
   setContentView(R.layout.shipping_info_activity)

   val rootView = findViewById<View>(android.R.id.content)

   val textInputLayouts = Utils.findViewsWithType(
           rootView, TextInputLayout::class.java)

   save_button.setOnClickListener {
       var noErrors = true
       for (textInputLayout in textInputLayouts) {
           val editTextString = textInputLayout.editText!!.text.toString()
           if (editTextString.isEmpty()) {
               textInputLayout.error = resources.getString(R.string.error_string)
               noErrors = false
           } else {
               textInputLayout.error = null
           }
       }

       if (noErrors) {
           // All fields are valid!
       }
   }
}

בנייה והפעלה. לוחצים על SAVE (שמירה), ומשאירים לפחות שדה טקסט אחד ריק:

ef2a846d08f2780d.png

שדות הטקסט הריקים הם אדומים ומתחתם יש טקסט שגיאה.

4. עדכון הלחצן

ב-MDC יש לחצנים עם:

  • גלי דיו
  • פינות מעוגלות
  • תמיכה בנושא בחירת נושאים
  • פריסה וטיפוגרפיה מושלמות
  • מובנה על AppCompatButton (כיתת הלחצנים הרגילים של Android) כדי שתדעו איך להשתמש בהם בקוד שלכם.

אופציונלי: החלפה של סיווג לחצנים

כברירת מחדל, ספריית Material מגדילה באופן אוטומטי לחצנים רגילים ללחצני MDC. עם זאת, תוכלו להחליף את כל ההפניות ל'לחצן' ב'לחצן חומר' כדי לגשת לשיטות נוספות הזמינות ב'לחצן חומר', למשל שינוי רדיוס הפינות. לחצני MDC הם רכיב פשוט שבעזרתו אפשר לחבר ולהפעיל את הפריטים. עליך רק להחליף את שם רכיב ה-XML Button ב-MaterialButton, ולהחיל את סגנון ברירת המחדל MaterialButton על MaterialButton.

בshipping_info_activity.xml, צריך לשנות את הלחצן לאפשרות:

shipping_info_activity.xml

<Button
   android:id="@+id/save_button"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="end"
   android:layout_marginTop="16dp"
   android:text="@string/label_save" />

אל:

shipping_info_activity.xml

<com.google.android.material.button.MaterialButton
   android:id="@+id/save_button"
   style="@style/Widget.MaterialComponents.Button"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="end"
   android:layout_marginTop="16dp"
   android:text="@string/label_save" />

יצירה והפעלה:

824c2b33592b2c7e.png

5. הוספת כרטיס

MaterialCardView הוא רכיב שמבוסס על CardView עם:

  • גובה וסגנון נכונים
  • מאפייני רוחב וצבע של הקו

גלישת תוכן בכרטיס

צריך לארוז את LinearLayout שמכיל את התוכן ב-shipping_info_activity.xml באמצעות רכיב MaterialCardView, באופן הבא:

shipping_info_activity.xml

<com.google.android.material.card.MaterialCardView
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_margin="16dp"
   app:contentPadding="16dp">


   <!-- LinearLayout goes here -->


</com.google.android.material.card.MaterialCardView>

בנייה והפעלה. צריך לכווץ את הטופס כולו לכרטיס:

75c86ab9fa395e3c.png

הרכיב 'תצוגת כרטיסי מוצר' הוא דרך מוכרת וחדשה לאריזה של התוכן בכרטיס.

6. Recap

החלפת כמה רכיבים נפוצים כדי להציג ערך מיידי: שדות טקסט, לחצנים, כרטיסים, ולא היה צורך לעצב מחדש את האפליקציה. גם רכיבים אחרים יכולים להשפיע מאוד, כמו סרגל האפליקציות העליון ופריסת Tab.

השלבים הבאים

אפשר לראות עוד רכיבים ב-MDC-Android ב-Android Widgets Catalog.

הצלחתי להשלים את ה-Codelab הזה תוך השקעה של זמן ומאמץ סבירים

נכון מאוד נכון נייטרלי לא נכון לא נכון בכלל

ארצה להמשיך להשתמש ברכיבי Material Materials בעתיד

נכון מאוד נכון נייטרלי לא נכון לא נכון בכלל